J'installe un grand nombre des mêmes packages dans différents environnements virtualenv . Existe-t-il un moyen de télécharger un package une fois, puis d' installer pip à partir d'un cache local?
Cela réduirait la bande passante et le temps de téléchargement.
virtualenv
pip
Matthew Rankin
la source
la source
Réponses:
Réponse mise à jour 19-nov-15
Selon la documentation Pip :
Par conséquent, la réponse mise à jour consiste simplement à utiliser pip avec ses valeurs par défaut si vous voulez un cache de téléchargement.
Réponse originale
À partir des nouvelles de pip , version 0.1.4:
Pour profiter de cela, j'ai ajouté ce qui suit à mon
~/.bash_profile
:ou, si vous êtes sur un Mac:
Remarques
PIP_DOWNLOAD_CACHE
répertoire. Par exemple, j'ai maintenant pas mal de packages Django.virtualenvs
dans l'avion, mais c'est toujours génial.la source
À mon avis,
pip2pi
est une solution beaucoup plus élégante et fiable pour ce problème.À partir de la documentation:
pip2pi
vous permet de créer votre propre index PyPI en utilisant deux commandes simples:Pour mettre en miroir un package et toutes ses exigences, utilisez
pip2tgz
:Pour créer un index de package à partir du répertoire précédent:
Pour installer à partir de l'index que vous avez créé à l'étape 2., vous pouvez simplement utiliser:
Vous pouvez même mettre en miroir votre propre index sur un hôte distant avec
pip2pi
.la source
pip2tgz
détecte si vous avez déjà téléchargé le package dans le répertoire désigné, donc si vous exécutez la même ligne d'installation ou plusieurs lignes d'installation qui ont des dépendances qui se chevauchent, il ne téléchargera chaque package qu'une seule fois.Pour les versions plus récentes de Pip:
Les nouvelles versions de Pip mettent désormais en cache les téléchargements par défaut. Consultez cette documentation:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
Pour les anciennes versions de Pip:
Créez un fichier de configuration nommé
~/.pip/pip.conf
et ajoutez le contenu suivant:Sur OS X, un meilleur chemin à choisir serait
~/Library/Caches/pip
car il suit la convention que d'autres programmes OS X utilisent.la source
pip.conf
avec undownload_cache
paramètre qui pointe vers le même répertoire à l'échelle du système.PIP_DOWNLOAD_CACHE a de sérieux problèmes. Plus important encore, il encode le nom d'hôte du téléchargement dans le cache, donc l'utilisation de miroirs devient impossible.
La meilleure façon de gérer un cache de téléchargements pip est de séparer l'étape "télécharger le package" de l'étape "installer le package". Les fichiers téléchargés sont communément appelés "fichiers sdist" (distributions sources) et je vais les stocker dans un répertoire $ SDIST_CACHE.
Les deux étapes finissent par être:
Ce qui va télécharger le package et le placer dans le répertoire pointé par $ SDIST_CACHE. Il n'installera pas le package. Et puis vous exécutez:
Pour installer le package dans votre environnement virtuel. Idéalement, $ SDIST_CACHE serait validé sous votre contrôle de code source. Lors du déploiement en production, vous n'exécuteriez que la deuxième commande pip pour installer les packages sans les télécharger.
la source
À partir de la version 6.0 , fait
pip
maintenant sa propre mise en cache:Plus d'informations à partir du lien ci - dessus :
la source
pip wheel est une excellente option qui fait ce que vous voulez avec la fonctionnalité supplémentaire de pré-compilation des packages. À partir des documents officiels :
Maintenant, votre
/tmp/wheelhouse
répertoire a toutes vos dépendances précompilées, vous pouvez donc copier le dossier sur un autre serveur et tout installer avec cette commande:Notez que tous les packages ne seront pas complètement portables sur les machines. Certains packages seront construits spécifiquement pour la version Python, la distribution du système d'exploitation et / ou l'architecture matérielle que vous utilisez. Cela sera spécifié dans le nom du fichier, comme
-cp27-none-linux_x86_64
pour CPython 2.7 sur un Linux 64 bits, etc.la source
En utilisant pip uniquement (ma version est 1.2.1), vous pouvez également créer un référentiel local comme celui-ci:
Lors du premier appel de pip, les packages du fichier des exigences sont recherchés dans le référentiel local (uniquement), puis installés à partir de là. En cas d'échec, pip récupère les packages à partir de leur emplacement habituel (par exemple PyPI) et les télécharge sur le
PIP_SDIST_INDEX
(mais n'installe rien!). Le premier appel est "répété" pour installer correctement le package à partir de l'index local.(
--download-cache
crée un nom de fichier local qui est l'URL complète (échappée), et pip ne peut pas l'utiliser comme index avec--find-links
.--download-cache
utilisera le fichier mis en cache, s'il est trouvé. Nous pourrions ajouter cette option au deuxième appel de pip, mais depuis l'index fonctionne déjà comme une sorte de cache, cela n'apporte pas forcément beaucoup. Cela aiderait si votre index est vidé, par exemple.)la source
Il existe une nouvelle solution à cela appelée pip-accel , un remplacement de la
pip
mise en cache intégrée.Nous avons vu une accélération d'environ 10x du passage de
pip
àpip-accel
.la source
Une option plus simple est
basket
.Étant donné le nom d'un package, il le téléchargera ainsi que toutes les dépendances vers un emplacement central; sans aucun des inconvénients du cache pip. C'est idéal pour une utilisation hors ligne.
Vous pouvez ensuite utiliser ce répertoire comme source pour
pip
:Ou
easy_install
:Vous pouvez également l'utiliser pour mettre à jour le panier chaque fois que vous êtes en ligne.
la source
Je pense que le package "pip-accel" doit être un bon choix.
la source