Come installare i pacchetti usando pip in base al file requisito.txt da una directory locale?


1083

Ecco il problema

Ho un requisito.txt che assomiglia a:

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
...

Ho una directory di archivio locale contenente tutti i pacchetti + altri.

Ho creato un nuovo virtualenv con

bin/virtualenv testing

dopo averlo attivato, ho provato a installare i pacchetti secondo i requisiti.txt dalla directory di archivio locale.

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

Ho ottenuto un output che sembra indicare che l'installazione va bene

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
....

Ma il controllo successivo ha rivelato che nessuno dei pacchetti è installato correttamente. Non riesco a importare il pacchetto e nessuno si trova nella directory site-pacchetti del mio virtualenv. Quindi cosa è andato storto?


4
Hai provato a usarlo in --no-indexmodo che non guardi nemmeno a PyPI?
Hugo Tavares,

2
Hai visualizzato il messaggio di errore. È generalmente vicino al fondo.
Bukzor,

È possibile utilizzare i percorsi dei file anziché i nomi dei pacchetti, ciò significa che è necessario modificare il file requisito.txt, ma mantenere lo stesso comando di installazione pip.
asafge

9
La risposta più votata (quella di Mike Lyons) non risponde nemmeno alla domanda . Potresti per favore accettare la risposta del codeape che è quella corretta?
Piotr Dobrogost,

2
sorpreso nessun altro collegato se non pip.pypa.io/en/stable/user_guide/#requirements-files
MrMesees

Risposte:


787

Questo funziona per me:

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

--no-index- Ignora l'indice del pacchetto (guardando solo gli --find-linksURL).

-f, --find-links <URL>- Se un URL o percorso di un file html, quindi analizzare i collegamenti agli archivi. Se un percorso o file://URL locale che è una directory, cerca gli archivi nell'elenco delle directory.


7
Le informazioni sul --no-indexcomando pip aiutano a installare l' --no-index indice del pacchetto Ignora (guardando solo gli --find-linksURL). Le informazioni su --find-linksdal comando pip aiutano l'installazione -f , --find-links <url>se un URL o percorso di un file html, quindi analizzare i collegamenti agli archivi. Se un percorso o file locale: // url è una directory, cerca gli archivi nell'elenco delle directory.
AWrightIV

1
//, Questa potrebbe essere una soluzione molto elegante, soprattutto vista l'eterna lotta con la vendita: bitprophet.org/blog/2012/06/07/on-vendorizing
Nathan Basanese

Un avvertimento con questo è che potresti pip install <some_module>non usarlo requirements.txtma che non si aggiorna requirements.txt. Un'alternativa potrebbe essere l'aggiornamento di una finestra mobile in modo tale da elencare tutti i comandi di installazione pip eseguiti per installare le dipendenze.
commerciali

ho provato questo python -m pip install -r requirements.txtquando all'interno dell'ambiente venv attivato. le cose si sono installate senza problemi ma quando faccio pip list non mostra quei pacchetti, quando sono nella venv attiva o anche dopo aver disattivato venv. inoltre non è in grado di utilizzare quei pacchetti. non so cosa c'è che non va qui
Shreyan Mehta,

Sei sicuro di fare pythonriferimento all'eseguibile python dell'ambiente attivato ( $ which python)?
codeape,

1366

Ho letto quanto sopra, mi rendo conto che questa è una vecchia domanda, ma è totalmente irrisolta e ancora in cima ai miei risultati di ricerca di Google, quindi ecco una risposta che funziona per tutti:

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

284
Mi rendo conto che questa risposta non affronta la domanda originale, ma risponde alla domanda che avevo quando l'ho trovata su Google ...
Jonathan,

8
@MikeLyons è abbastanza sicuro che la domanda non sia effettivamente cambiata - non c'è cronologia delle modifiche.
Mark Amery,

49
per coloro a cui piace sapere di cosa digitano, il -r nel comando significa semplicemente "installa da un file di requisiti", ed è una scorciatoia per --requirement
Florent Chatterji

2
Quando voglio aggiornare un pacchetto (ad es. Django), cambio la versione nel mio file Requisito.txt e quindi eseguo pip install -r /path/to/requirements.txt. Questo rileva la modifica, aggiorna il pacchetto e lascia tutto il resto da solo.
Utente

1
mentre di solito funziona, un paio di sottigliezze lo fanno fallire. Se l'installazione non è riuscita per i pacchetti in requirements.txt, nessuno di essi verrà installato. Se un modulo richiesto importa una dipendenza durante la sua installazione (invece di elencarla come requisito), fallirà anche se la dipendenza lo precede nell'elenco delle dipendenze, causando il fallimento di tutti i moduli. Probabilmente è un errore importare un modulo dipendente durante l'installazione, ma è anche imprevisto che le dipendenze elencate in requirements.txtnon siano installate in sequenza, ma tutte in una volta.
iggie

130

Per virtualenv installare tutti i file nel file Requisiti.txt.

  1. cd nella directory in cui si trova fabbisogno.txt
  2. attiva il tuo virtualenv
  3. corri: pip install -r requirements.txt nella tua shell

3
"pyenv virtualenv pip install Requisiti.txt non funzionante" per il bene di Google ...
Jerad,

Funziona per me invece di altre risposte, ty
Jo Eark,

58

Ho avuto un problema simile. Ho provato questo:

pip install -U -r requirements.txt 

(-U = aggiorna se era già installato)

Ma il problema è continuato. Mi sono reso conto che mancavano alcune librerie generiche per lo sviluppo.

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

Non so se questo potrebbe aiutarti.


32
pip install -r requirements.txt

Per ulteriori dettagli, consultare l'opzione di aiuto.

pip install --help

Possiamo trovare l'opzione '-r'

-r, --reirement Installazione dal file dei requisiti indicato. Questa opzione può essere utilizzata più volte.

Ulteriori informazioni su alcune opzioni di installazione pip comunemente utilizzate: (Questa è l'opzione di aiuto sul comando di installazione pip)

inserisci qui la descrizione dell'immagine

Anche quanto sopra è il set completo di opzioni. Utilizzare pip install --help per un elenco completo di opzioni.


26

Risposta breve

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

o in un'altra forma:

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

Spiegazione

Qui, -rè una forma abbreviata di --requiremente richiede l' pipinstallazione dal requirementsfile specificato.

pipinizierà l'installazione solo dopo aver verificato la disponibilità di tutti gli elementi elencati nel requirementsfile e non inizierà l'installazione anche se requirementnon è disponibile.

Una soluzione alternativa per installare i pacchetti disponibili è l'installazione dei pacchetti elencati uno per uno. Utilizzare il seguente comando per quello. Verrà visualizzato un avviso di colore rosso per avvisarti dei pacchetti non disponibili.

cat requirements.txt | xargs -n 1 pip install

Per ignorare i commenti (righe che iniziano con a #) e le righe vuote, utilizzare:

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

20

Spesso, si desidera un'installazione rapida dagli archivi locali, senza sondare PyPI.

Innanzitutto, scarica gli archivi che soddisfano i tuoi requisiti:

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

Quindi, installa usando –find-linkse –no-index:

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

no such option: --download
Max Malysh,

12

Lavoro con molti sistemi che sono stati confusi dagli sviluppatori "seguendo le indicazioni che hanno trovato su Internet". È estremamente comune che tu pipe il tuo pythonnon stiate guardando gli stessi percorsi / pacchetti del sito. Per questo motivo, quando incontro stranezze, comincio facendo questo:

$ 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)

Questo è un sistema felice .

Di seguito è riportato un sistema infelice . (O almeno è un sistema beatamente ignorante che rende gli altri infelici.)

$ 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

È infelice perché pipsta usando (python3.6 e) /usr/local/lib/python3.6/site-packagesmentre pythonsta usando (python2.7 e)/usr/local/lib/python2.7/site-packages

Quando voglio assicurarmi di installare i requisiti sul giusto python, faccio questo:

$ 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

Hai sentito, "Se non è rotto, non provare a ripararlo". La versione di DevOps è "Se non l'hai rotto e puoi aggirarlo, non provare a risolverlo."


10

prima di tutto, crea un ambiente virtuale

in Python 3.6

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

in Python 2.7

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

quindi attiva l'ambiente e installa tutti i pacchetti disponibili nel file requisito.txt.

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

9

Installazione del file requisito.txt in env virtuale con python 3:

Ho avuto lo stesso problema. Stavo cercando di installare il file Requisito.txt in un ambiente virtuale. Ho trovato la soluzione

Inizialmente, ho creato il mio ambiente virtuale in questo modo:

virtualenv -p python3 myenv

Attiva l'ambiente usando:

source myenv/bin/activate

Ora ho installato il requisito.txt usando:

pip3 install -r requirements.txt

L'installazione è andata a buon fine e sono stato in grado di importare i moduli.


Ho riscontrato questo problema durante l'installazione del file dei requisiti all'interno di un ambiente virtuale. Ora ho modificato la mia risposta per risolvere il problema
janu777,

1
Usando Anaconda Python 3.6 in Windows, ho dovuto fare virtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes

1
In realtà, al contrario, questa sembra l'unica risposta che fa rispondere alla parte della domanda sull'installazione di dipendenze definite a livello locale in requirements.txtun virtualenv. A meno che non mi manchi qualcosa? Comunque grazie!
davnicwil,

8

prova questo

python -m pip install -r requirements.txt

7
pip install --user -r requirements.txt 

O

pip3 install --user -r requirements.txt 

è possibile specificare --userall'interno del requirements.txtfile?
liang
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.