Comment puis-je installer à partir d'un cache local avec le pip?
- Je installer un grand nombre des mêmes paquets des différentes virtualenv environnements. Est-il possible que je peux télécharger un paquet une fois et ensuite pip installer à partir d'un cache local?
Cela permettrait de réduire la bande passante de téléchargement et le temps.
- Noter qu'à compter du pip 6.0 (2014-12-22), incrustation d'image cache par défaut. Voir pip.pypa.io/fr/stable/de référence/pip_install.html#mise en cache pour plus de détails.
- Il ne se contente pas de réduire la bande passante de téléchargement de temps, il peut également éliminer le temps passé à l'analyse de l'PyPI l'index pour vérifier les versions des paquets, et si vous êtes à la mise en cache roues, il peut éliminer le temps consacré à la construction des roues pour les paquets qui ne fournissent pas. Il ajoute à une très importante augmentation de la vitesse.
Vous devez vous connecter pour publier un commentaire.
Mis À Jour Répondre 19-Nov-15
Selon la Pip documentation:
Par conséquent, la mise à jour de réponse est d'utiliser le pip avec ses paramètres par défaut si vous voulez un cache de téléchargement.
Réponse Originale À Cette Question
De la pip news, version 0.1.4:
À prendre avantage de cela, j'ai ajouté ce qui suit à mon
~/.bash_profile
:ou, si vous êtes sur un Mac:
Notes
PIP_DOWNLOAD_CACHE
répertoire. Par exemple, j'ai maintenant tout à fait un peu de Django paquets.virtualenvs
sur l'avion, mais il est encore grand.export PIP_DOWNLOAD_CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/pip"
À mon avis,
pip2pi
est beaucoup plus élégant et fiable de solution pour ce problème.De la documentation:
pip2pi
vous permet de créer votre propre PyPI index à l'aide de deux commandes simples:De miroir d'un paquet et l'ensemble de ses besoins, utiliser
pip2tgz
:De construire un index de paquets à partir du répertoire précédent:
À installer à partir de l'index vous avez créé dans l'étape 2., vous pouvez simplement utiliser:
Vous pouvez même le miroir de votre propre index à un hôte distant avec
pip2pi
.pip2tgz
détecte si vous avez déjà téléchargé le paquet dans le répertoire désigné, donc, si vous exécutez la même ligne d'installation ou installer plusieurs lignes qui se chevauchent les dépendances, il suffira de télécharger chaque paquet une fois.Pour les nouveaux Pip versions:
Plus récent Pip versions maintenant le cache de téléchargements par défaut. Voir cette documentation:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
Pour les anciens Pip versions:
Créer un fichier de configuration nommé
~/.pip/pip.conf
, et ajoutez le contenu suivant:Sur OS X, une meilleure voie à choisir serait
~/Library/Caches/pip
puisqu'il suit la convention autres OS X programmes.pip.conf
avec undownload_cache
paramètre qui pointe vers le même système à l'échelle de répertoire.PIP_DOWNLOAD_CACHE a des problèmes plus sérieux. Plus important encore, il encode le nom d'hôte de la télécharger dans le cache, en utilisant des miroirs devient impossible.
La meilleure façon de gérer un cache de pip téléchargements est de séparer la "télécharger le package" l'étape de la "installer le paquet" étape. Les fichiers téléchargés sont communément appelés "sdist fichiers" (source distributions) et je vais les stocker dans un répertoire $SDIST_CACHE.
Les deux étapes de la fin:
Qui va télécharger le package et le placer dans le répertoire pointé par $SDIST_CACHE. Il ne sera pas installer le package. Et puis vous exécutez:
Pour installer le paquet dans votre environnement virtuel. Idéalement, $SDIST_CACHE serait commis sous votre contrôle à la source. Lors du déploiement en production, vous devez exécuter seulement le second pip de commande pour installer les paquets sans les télécharger.
De départ dans la version 6.0,
pip
maintenant-t-il son propre mise en cache:Plus d'informations à partir de la le lien ci-dessus:
pip roue est une excellente option qui fait ce que vous voulez avec la fonctionnalité supplémentaire de pré-compiler les paquets. À partir de la officiel docs:
Maintenant votre
/tmp/wheelhouse
répertoire a toutes vos dépendances fichier, de sorte que vous pouvez copier le dossier vers un autre serveur et d'installer tout avec cette commande:Noter que pas tous les paquets sera complètement portable sur l'ensemble des machines. Certains paquets seront construits spécifiquement pour la version de Python, OS de distribution et/ou de l'architecture du matériel que vous utilisez. Qui sera spécifié dans le nom de fichier, comme
-cp27-none-linux_x86_64
pour Disponible 2.7 sur un Linux 64 bits, etc.Utilisation de pip seulement (ma version 1.2.1), vous pouvez également construire un référentiel local comme ceci:
Dans le premier appel de pip, les forfaits à partir de les exigences de fichiers sont recherchés dans le référentiel local (uniquement), puis installé à partir de là. Si cela échoue, pip récupère les paquets à partir de son emplacement habituel (par exemple, PyPI) et le télécharge sur le
PIP_SDIST_INDEX
(mais ne pas installer n'importe quoi!). Le premier appel est "répétée" pour bien installer le package à partir de l'index local.(
--download-cache
crée un nom de fichier local qui est l' (échappé) URL, et pip ne peut pas l'utiliser comme un index avec--find-links
.--download-cache
va utiliser le fichier mis en cache, s'il est trouvé. Nous pourrions ajouter cette option à l'appel de la deuxième de pip, mais depuis l'index fonctionne déjà comme une sorte de cache, il n'apporte pas nécessairement beaucoup. Il serait utile si votre index est vidé, par exemple.)Une option plus simple est
panier
.Donné un nom de paquet, il sera le télécharger et de toutes les dépendances d'un emplacement central; sans aucun des inconvénients de pip cache. Ce qui est excellent pour une utilisation hors connexion.
Vous pouvez ensuite utiliser ce répertoire en tant que source pour
pip
:Ou
easy_install
:Vous pouvez également l'utiliser pour mettre à jour le panier lorsque vous êtes en ligne.
Il y a une solution nouvelle à ce qui est appelé pip-accel, une baisse-dans le remplacement pour
pip
avec cache intégré.Nous avons vu autour de 10x accélération de commutation de
pip
àpip-accel
.Je pense que le paquet "pip-accel" doit être un bon choix.