2012-07-28 15 views
36

Per creare ambienti virtuali Python uso virtualenv e pip. Il flusso di lavoro è molto semplice:Dividi i file di requisiti nel pip

$ virtualenv project 
$ cd project 
$ . bin/activate 
$ pip install -r /path/to/requirements/req1.txt 
$ pip install -r /path/to/requirements/req2.txt 

Il numero di differenti file requisito può crescere abbastanza per fare comodo avere un modo per includere in una volta, quindi mi piacerebbe piuttosto preferisco dire:

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

con req1_req2.txt contenente qualcosa come:

include /path/to/requirements/req1.txt 
include /path/to/requirements/req2.txt 

o in altro modo:

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

Nessuno di quelli funziona e per quanto semplice possa essere, non riesco a capire come fare ciò che voglio.

Qualche suggerimento?

+0

E lo script che accetta input come req1 | req2 ... lo divide e quindi chiama os.system con il comando pip corretto? – mrok

risposta

61

Il flag -r non è limitato all'utilizzo da riga di comando, ma può essere utilizzato anche all'interno dei file di requisiti. Così, in esecuzione pip install -r req-1-and-2.txt quando REQ-1-e-2.txt contiene questo:

-r req-1.txt 
-r req-2.txt 

installerà tutto specificato nella req-1.txt e req-2.txt.

+0

Può essere utilizzato per estendere e sovrascrivere? Per esempio. req-1.txt specifica 'foo == 1.3' e req-2.txt' foo == 1.4', installerebbe 1.4? –

+2

Rispondere alla mia domanda: No, non funziona: 'Doppio requisito dato: foo == 1.4 ...' –

+2

@ beluga.me funziona SE il tuo pip ha la soluzione. Se si dispone di pip 1.5.X che è l'impostazione predefinita per dire Debian wheezy o jessie, piuttosto che fare * pip install -U pip * (o simile) dovrebbe risolvere questo problema. – Sergey