2012-01-16 3 views
17

Io uso un pip requirements file per mantenere un elenco di dipendenze per i miei progetti.Come mantenere le opzioni di installazione del pip nel file dei requisiti effettuato da pip freeze?

ora mi trovo a dover installare una libreria utilizzando pip install --install-option='some-setup.py.option'mapip freeze non registra queste opzioni nella sua uscita che li risparmio in di requirements.txt mio progetto. Questo causa problemi perché un semplice pip install -r requirements.txt su una nuova macchina installa tutte le dipendenze senza fornire gli argomenti richiesti per questa libreria e ho perso la semplice operazione di andata e ritorno.

Così, la mia domanda 2 è parte:

  • C'è un modo per mantenere pip installazione delle opzioni nell'output congelamento pip in qualche modo?
  • In caso contrario, esiste un modo per modificare manualmente il file dei requisiti per aggiungere l'opzione di installazione? Sto bene perdendo la natura di andata e ritorno di pip freeze se necessario, e passando alla manutenzione manuale del file dei requisiti. Ho controllato lo documentation ma non ho visto nulla per aiutarti.

dettagli inutili, ma forse interessante seguire

voglio installare pymongo ma without building the C extension modo da poter utilizzare in modo asincrono in un app basata eventlet.

Installare lo desideri e costruire requirements.txt:

(test)[email protected]:~/test$ pip install pymongo --install-option='--no_ext' 
Downloading/unpacking pymongo 
    Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded 
    Running setup.py egg_info for package pymongo 
Installing collected packages: pymongo 
    Running setup.py install for pymongo 
Successfully installed pymongo 
Cleaning up... 
(test)[email protected]:~/test$ pip freeze > requirements.txt 
(test)[email protected]:~/test$ cat requirements.txt 
bottle==0.10.7 
distribute==0.6.10 
eventlet==0.9.16 
greenlet==0.3.3 
lxml==2.3.3 
pymongo==2.1.1 
simplejson==2.3.2 
wsgiref==0.1.2 

Nel nuovo virtualenv, provare a installare stesso progetto da requirements.txt. pip costruisce l'estensione C per pymongo :(

(test2)[email protected]:~/test2$ pip install -r requirements.txt 
... 
Downloading/unpacking pymongo==2.1.1 (from -r requirements.txt (line 6)) 
    Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded 
    Running setup.py egg_info for package pymongo 
Installing collected packages: pymongo 
    Running setup.py install for pymongo 
    building 'bson._cbson' extension 
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Ibson -I/usr/include/python2.6 -c bson/_cbsonmodule.c -o build/temp.linux-i686-2.6/bson/_cbsonmodule.o 
... 
Successfully installed pymongo 
Cleaning up... 

Aggiornamento Issue 271 è stato aperto contro pip nell'aprile 2011 per chiedere la possibilità di specificare linea per linea --install-option in requirements.txt. Si prega di votare per il problema se si ha lo stesso problema.

+0

se si aggiunge manualmente --install-option = '- no_ext' al file dei requisiti, funziona? - Se non sospetto che dovrai richiedere che gli sviluppatori di pip aggiungano questa funzionalità (che è una grande idea!) – d3vid

+2

@ d3vid Che non funzioni ho paura. C'è già una richiesta di funzionalità per questo, aperta ad aprile 2011: https://github.com/pypa/pip/issues/271. Per favore aggiungi anche il tuo +1. – Day

risposta

12

Dalla versione 7.0 (rilasciata 2015-05-21), pip ha la capacità di analizzare --install-option e --global-option dai file dei requisiti. Ora dovrebbe essere possibile avere la seguente riga nel vostro requirements.txt:

pymongo==2.1.1 --install-option='--no_ext' 

Maggiori informazioni possono essere trovate here e here.

+1

Plz risolve il primo collegamento a https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40 – y0prst

+0

Quale versione di pip è questa? – hlin117

+0

@ hlin117 sembra versione 7.0 in poi in base a [il primo link] (https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40) – Day

5

Questo potrebbe essere probabilmente troppo ingenuo, ma se si sta bene gestendo manualmente i requisiti e le opzioni corrispondenti - perché non mantenerli come un piccolo script di shell che include l'intero incantesimo dei pip? Solo un work-around fino a quando la funzione richiesta viene ascoltata :)

+1

Questo fa il trucco nel frattempo sì. – Day

+0

Sto avendo lo stesso problema, e mi sento un po 'stupido per non averlo inventato io stesso. Grazie per aver postato questo suggerimento! – kungphu

+0

interrompe la convenzione 'requirements.txt', che fa schifo perché interrompe le cose a valle come, ad esempio http://docs.saltstack.com/en/latest/ref/states/all/salt.states.pip_state.html#salt .states.pip_state.installed. Ma sì, è apparentemente ciò che sarà necessario qui. – Andrew