1612 votes

Comment puis-je installer des paquets en utilisant pip selon le fichier requirements.txt à partir d'un répertoire local ?

Voici le problème :

J'ai un exigences.txt qui ressemble à :

BeautifulSoup==3.2.0
Django==1.3
Fabric==1.2.0
Jinja2==2.5.5
PyYAML==3.09
Pygments==1.4
SQLAlchemy==0.7.1
South==0.7.3
amqplib==0.6.1
anyjson==0.3
...

J'ai un répertoire d'archives local contenant tous les paquets + d'autres.

J'ai créé un nouveau virtualenv avec

bin/virtualenv testing

Après l'avoir activé, j'ai essayé d'installer les paquets selon la procédure suivante exigences.txt à partir du répertoire d'archives local.

source bin/activate
pip install -r /path/to/requirements.txt -f file:///path/to/archive/

J'ai obtenu des résultats qui semblent indiquer que l'installation est correcte :

Downloading/unpacking Fabric==1.2.0 (from -r ../testing/requirements.txt (line 3))
  Running setup.py egg_info for package Fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
Downloading/unpacking South==0.7.3 (from -r ../testing/requirements.txt (line 8))
  Running setup.py egg_info for package South
....

Mais une vérification ultérieure a révélé qu'aucun des paquets n'est installé correctement. Je ne peux pas importer le paquet, et aucun n'est trouvé dans le répertoire site-packages de mon virtualenv. Alors, qu'est-ce qui a mal tourné ?

5 votes

Avez-vous essayé d'utiliser --no-index donc il ne regarde même pas PyPI ?

3 votes

Vous avez coupé le message d'erreur. Il se trouve généralement en bas de la page.

0 votes

Vous pouvez utiliser les chemins d'accès aux fichiers au lieu des noms des paquets, ce qui signifie que vous devrez modifier le fichier requirements.txt, mais que la commande pip install restera la même.

32voto

Safwan Points 1028

Réponse courte

pip install -r /path/to/requirements.txt

ou sous une autre forme :

python -m pip install -r /path/to/requirements.txt

Explication

Ici, -r est la forme courte de --requirement et il demande à la pip à installer à partir de l'adresse donnée requirements fichier.

pip ne commencera l'installation qu'après avoir vérifié la disponibilité de tous les éléments listés dans la section requirements et il ne commencera pas l'installation même si une requirement n'est pas disponible.

Une solution de contournement pour installer les paquets disponibles consiste à installer les paquets listés un par un. Utilisez la commande suivante pour cela. Un avertissement de couleur rouge sera affiché pour vous informer des paquets non disponibles.

cat requirements.txt | xargs -n 1 pip install

Pour ignorer les commentaires (lignes commençant par un # ) et des lignes vides, utilisez :

cat requirements.txt | cut -f1 -d"#" | sed '/^\s*$/d' | xargs -n 1 pip install

29voto

Girish Vas Points 1

Tout d'abord, créez un environnement virtuel.

Dans Python 3.6

virtualenv --python=/usr/bin/python3.6 <path/to/new/virtualenv/>

Dans Python 2.7

virtualenv --python=/usr/bin/python2.7 <path/to/new/virtualenv/>

Ensuite, activez l'environnement et installez tous les paquets disponibles dans la section exigence.txt fichier.

source <path/to/new/virtualenv>/bin/activate
pip install -r <path/to/requirement.txt>

24voto

Jadav Points 536

Souvent, vous voudrez une installation rapide à partir d'archives locales, sans sonder PyPI.

Tout d'abord, téléchargez les archives qui répondent à vos besoins :

$ pip install --download <DIR> -r requirements.txt

Ensuite, installez en utilisant –find-links y –no-index :

$ pip install --no-index --find-links=[file://]<DIR> -r requirements.txt

23voto

Jema Points 41

Essayez ça :

python -m pip install -r requirements.txt

16voto

Richard Bronosky Points 3163

Je travaille avec de nombreux systèmes qui ont été détraqués par des développeurs "suivant des instructions qu'ils ont trouvées sur Internet". Il est extrêmement courant que votre pip et votre python ne regardent pas les mêmes chemins/sites-packages. C'est pourquoi, lorsque je rencontre une bizarrerie, je commence par faire ceci :

$ python -c 'import sys; print(sys.path)'
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages']

$ pip --version
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

C'est un système heureux .

Vous trouverez ci-dessous un système malheureux . (Ou du moins, c'est un système d'ignorance béate qui rend les autres malheureux).

$ pip --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

$ python -c 'import sys; print(sys.path)'
['', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/site-packages']

$ which pip pip2 pip3
/usr/local/bin/pip
/usr/local/bin/pip3

Il est malheureux parce que pip est (python3.6 et) utilisant /usr/local/lib/python3.6/site-packages tandis que python est (python2.7 et) utilisant /usr/local/lib/python2.7/site-packages

Lorsque je veux m'assurer que j'installe les exigences à la droite python, je fais ça :

$ which -a python python2 python3
/usr/local/bin/python
/usr/bin/python
/usr/local/bin/python2
/usr/local/bin/python3

$ /usr/bin/python -m pip install -r requirements.txt

Vous avez entendu, "Si ce n'est pas cassé, n'essayez pas de le réparer". La version DevOps de cela est : "Si vous ne l'avez pas cassé et que vous pouvez le contourner, n'essayez pas de le réparer".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X