Comment installer des packages à l'aide de pip selon le fichier requirements.txt à partir d'un répertoire local?

1083

Voici le problème

J'ai un requirements.txt qui ressemble à ceci:

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 packages + autres.

J'ai créé un nouveau virtualenv avec

bin/virtualenv testing

en l'activant, j'ai essayé d'installer les packages selon requirements.txt à partir du répertoire d'archivage local.

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

J'ai obtenu une sortie qui semble 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 paquet n'est installé correctement. Je ne peux pas importer le package, et aucun ne se trouve dans le répertoire site-packages de mon virtualenv. Alors qu'est-ce qui a mal tourné?

kakarukeys
la source
4
Avez-vous essayé de l'utiliser --no-indexpour qu'il ne regarde même pas PyPI?
Hugo Tavares
2
Vous avez coupé le message d'erreur. C'est généralement près du fond.
bukzor
Vous pouvez utiliser les chemins de fichier au lieu des noms de package, cela signifie que vous devrez modifier le fichier requirements.txt, mais garder la commande pip install la même.
asafge
9
La réponse la plus éloquente (celle de Mike Lyons) ne répond même pas à la question . Pourriez-vous s'il vous plaît accepter la réponse du codeape qui est la bonne?
Piotr Dobrogost
2
surpris personne d'autre lié mais pip.pypa.io/en/stable/user_guide/#requirements-files
MrMesees

Réponses:

787

Cela fonctionne pour moi:

$ pip install -r requirements.txt --no-index --find-links file:///tmp/packages

--no-index- Ignorer l'index du package (en ne regardant que les --find-linksURL à la place).

-f, --find-links <URL>- Si une URL ou un chemin d'accès à un fichier html, puis analyser les liens vers les archives. Si un chemin d'accès local ou une file://URL est un répertoire, recherchez des archives dans la liste des répertoires.

codeape
la source
7
Les informations --no-indexde la commande pip aident à installer l' --no-index index de package Ignore (en ne regardant que les --find-linksURL à la place). Informations sur la --find-linkscommande pip aide à l'installation -f , --find-links <url>si une URL ou un chemin vers un fichier html, puis analysez les liens vers les archives. Si un chemin local ou un fichier: // url est un répertoire, recherchez les archives dans la liste des répertoires.
AWrightIV
1
//, Cela pourrait être une solution très élégante, surtout compte tenu de l'éternelle lutte avec la commercialisation: bitprophet.org/blog/2012/06/07/on-vendorizing
Nathan Basanese
Une mise en garde à ce sujet est que vous pouvez pip install <some_module>utiliser requirements.txtsans que cela ne se mette à jour requirements.txt. Une alternative peut être la mise à jour d'un docker de sorte qu'il répertorie toutes les commandes pip install qui sont exécutées pour installer les dépendances.
esperluette
j'ai essayé cela python -m pip install -r requirements.txtà l'intérieur de l'environnement venv activé. les choses sont bien installées mais quand je fais la liste des pip, cela ne montre pas que les paquets, quand je suis dans le venv actif ou même après avoir désactivé venv. également pas en mesure d'utiliser ces packages.
Je
Êtes-vous sûr de faire pythonréférence à l'exécutable python de l'environnement activé ( $ which python)?
codeape
1366

J'ai lu ce qui précède, je me rends compte que c'est une vieille question, mais elle est totalement non résolue et toujours en haut de mes résultats de recherche Google, alors voici une réponse qui fonctionne pour tout le monde:

pip install -r /path/to/requirements.txt
Mike Lyons
la source
284
Je me rends compte que cette réponse ne répond pas à la question d'origine, mais elle répond à la question que j'avais quand je l'ai trouvée sur Google ...
Jonathan
8
@MikeLyons à peu près sûr que la question n'a en fait pas changé - il n'y a pas d'historique de modification.
Mark Amery
49
pour ceux qui aiment savoir ce qu'ils tapent, -r dans la commande signifie simplement "installer à partir d'un fichier d'exigences", et est un raccourci pour --requirement
Florent Chatterji
2
Lorsque je souhaite mettre à niveau un package (par exemple Django), je change la version dans mon fichier requirements.txt puis je lance pip install -r /path/to/requirements.txt. Cela détecte le changement, met à niveau le package et laisse tout le reste seul.
Utilisateur
1
bien que cela fonctionne généralement, quelques subtilités le font échouer. Si une installation échoue pour les packages dans requirements.txt, aucun d'entre eux ne sera installé. Si un module requis importe une dépendance lors de son installation (au lieu de simplement la répertorier comme une exigence), il échouera même si la dépendance la précède dans la liste des dépendances, provoquant l'échec de tous les modules. C'est probablement un bogue d'importer un module dépendant lors de l'installation, mais il est également possible que les dépendances répertoriées dans requirements.txtne soient pas installées de manière séquentielle, mais en même temps.
Iggie
130

Pour virtualenv installer tous les fichiers dans le fichier requirements.txt.

  1. cd dans le répertoire où se trouve requirements.txt
  2. activer votre virtualenv
  3. courir: pip install -r requirements.txt dans votre coquille
Aaron Lelevier
la source
3
"pyenv virtualenv pip install requirements.txt ne fonctionne pas" pour le bien de Google ...
Jerad
Cela fonctionne pour moi au lieu d'autres réponses, ty
Jo Eark
58

J'avais un problème similaire. J'ai essayé ceci:

pip install -U -r requirements.txt 

(-U = mettre à jour s'il avait déjà été installé)

Mais le problème a continué. J'ai réalisé que certaines bibliothèques génériques pour le développement étaient manquées.

sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk

Je ne sais pas si cela pourrait vous aider.

enriquetaso
la source
32
pip install -r requirements.txt

Pour plus de détails, veuillez vérifier l'option d'aide.

pip install --help

On peut trouver l'option '-r'

-r, --requirement Installer à partir du fichier d'exigences donné. Cette option peut être utilisée plusieurs fois.

Plus d'informations sur certaines options d'installation de pip couramment utilisées: (Ceci est l'option d'aide de la commande pip install)

entrez la description de l'image ici

Ce qui précède est également l'ensemble complet des options. Veuillez utiliser pip install --help pour la liste complète des options.

Py_minion
la source
26

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, -rest une forme abrégée de --requirementet il demande l' pipinstallation à partir du requirementsfichier donné .

pipne démarre l'installation qu'après avoir vérifié la disponibilité de tous les éléments répertoriés dans le requirementsfichier et il ne démarre pas l'installation même s'il requirementn'est pas disponible.

Une solution de contournement pour installer les packages disponibles consiste à installer les packages répertoriés un par un. Utilisez la commande suivante pour cela. Un avertissement de couleur rouge s'affichera pour vous informer des packages indisponibles.

cat requirements.txt | xargs -n 1 pip install

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

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

Souvent, vous souhaiterez une installation rapide à partir des 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-linkset –no-index:

$ pip install --no-index --find-links=[file://]<DIR> -r requirements.txt
Jadav Bheda
la source
no such option: --download
Max Malysh
12

Je travaille avec de nombreux systèmes qui ont été détruits par les développeurs "en suivant les instructions qu'ils ont trouvées sur Internet". Il est extrêmement courant que vous pipet vos pythonne regardiez pas les mêmes chemins / packages de site. Pour cette raison, 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 .

Voici un système malheureux . (Ou du moins, c'est un système parfaitement ignorant qui rend les autres mécontents.)

$ 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 mécontent car pip(python3.6 et) utilise /usr/local/lib/python3.6/site-packagesalors que python(python2.7 et) utilise/usr/local/lib/python2.7/site-packages

Lorsque je veux m'assurer d'installer les exigences sur le bon python, je fais ceci:

$ 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 ceci est: "Si vous ne l'avez pas cassé et que vous pouvez le contourner, n'essayez pas de le réparer."

Bruno Bronosky
la source
10

tout d'abord, créer un environnement virtuel

en python 3.6

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

en python 2.7

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

puis activez l'environnement et installez tous les packages disponibles dans le fichier requirements.txt.

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

Installation du fichier requirements.txt dans env virtuel avec python 3:

J'ai eu le même problème. J'essayais d'installer le fichier requirements.txt dans un environnement virtuel. J'ai trouvé la solution.

Au départ, j'ai créé mon env virtuel de cette façon:

virtualenv -p python3 myenv

Activez l'environnement en utilisant:

source myenv/bin/activate

Maintenant, j'ai installé le fichier requirements.txt en utilisant:

pip3 install -r requirements.txt

L'installation a réussi et j'ai pu importer les modules.

janu777
la source
J'ai rencontré ce problème lors de l'installation du fichier d'exigences dans un environnement virtuel. J'ai maintenant modifié ma réponse pour résoudre le problème
janu777
1
En utilisant Anaconda Python 3.6 sous Windows, je devais faire virtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes
1
En fait, au contraire, cela semble être la seule réponse qui répond à la partie de la question sur l'installation de dépôts définis localement dans requirements.txtun virtualenv. A moins que je manque quelque chose? Quoi qu'il en soit, merci!
davnicwil
8

essaye ça

python -m pip install -r requirements.txt
Jema
la source
7
pip install --user -r requirements.txt 

OU

pip3 install --user -r requirements.txt 
user1460675
la source
est-il possible de spécifier à l' --userintérieur du requirements.txtfichier?
liang