2012-01-16 14 views
17

Używam pip requirements file do utrzymywania listy zależności dla moich projektów.Jak zachować opcje instalacji pip w pliku wymagań utworzonym przez pip freeze?

ja teraz znajduję się konieczności instalowania biblioteki korzystając pip install --install-option='some-setup.py.option'alepip freeze nie rejestruje te opcje w swoim wyjściu, które mogę zapisać w moim projekcie znajduje requirements.txt. Powoduje to problemy, ponieważ prosty pip install -r requirements.txt na nowym komputerze instaluje wszystkie zależności bez dostarczania wymaganych argumentów dla tej jednej biblioteki, i straciłem prostą operację w obie strony.

Więc moje pytanie brzmi, część 2:

  • Czy istnieje sposób, aby utrzymać pip zainstalować opcje wyjścia zamrożenia pip jakoś?
  • Jeśli nie, czy istnieje sposób ręcznego zhakowania pliku wymagań, aby dodać opcję instalacji? Jestem w porządku z utratą charakteru podróży w obie strony pip freeze, jeśli muszę, i przejściem do ręcznej konserwacji pliku wymagań. Sprawdziłem numer documentation, ale nie widziałem nic, co mogłoby pomóc.

Niepotrzebne ale ewentualnie interesujących szczegółów śledzić

chcę zainstalować pymongo ale without building the C extension więc można go używać asynchronicznie w eventlet aplikacji opartych.

zainstalować jako pożądane i budować 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 

W nowym virtualenv, spróbuj zainstalować samego projektu z requirements.txt. pip buduje rozszerzenie C dla 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... 

Aktualizacja Issue 271 został otwarty przed pip w kwietniu 2011 roku z prośbą o możliwość określenia za linię --install-option w requirements.txt. Zagłosuj na problem, jeśli masz ten sam problem.

+0

jeśli ręcznie dodajesz --install-option = '- no_ext' do pliku wymagań, czy to działa? - jeśli nie, podejrzewam, że będziesz musiał poprosić programiści pip o dodanie tej funkcjonalności (co jest świetnym pomysłem!) – d3vid

+2

@ d3vid To nie działa Obawiam się. Istnieje już prośba o dodanie tej funkcji, otwarta w kwietniu 2011 r .: https://github.com/pypa/pip/issues/271. Dodaj tam również swój +1. – Day

Odpowiedz

12

Od wersji 7.0 (wydanej 2015-05-21), pip ma możliwość analizy --install-option i --global-option z plików wymagań. Powinno być teraz możliwe, aby mieć następującą linię w swojej requirements.txt:

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

Więcej informacji można znaleźć here i here.

+1

Plz naprawić pierwszy link do https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40 – y0prst

+0

Jaka jest wersja PIP? – hlin117

+0

@ hlin117 wygląda jak wersja 7.0, zgodnie z [pierwszy link] (https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40) – Day

5

To może być zbyt naiwne, ale jeśli dobrze radzisz sobie z ręcznym zarządzaniem wymaganiami i odpowiednimi opcjami - dlaczego nie zachować ich jako małego skryptu powłoki, który zawiera całą inkantację pip? Tylko obejście do momentu wysłuchania żądania funkcji :)

+1

To działa w międzyczasie tak. – Day

+0

Mam ten sam problem i czuję się trochę głupio, że nie wymyśliłem tego sam. Dziękujemy za opublikowanie tej sugestii! – kungphu

+0

łamie konwencję 'requirements.txt', która jest do bani, ponieważ rozbija elementy w dół, np. Http://docs.saltstack.com/en/latest/ref/states/all/salt.states.pip_state.html#salt .states.pip_state.installed. Ale tak, to chyba to, co będzie tutaj potrzebne. – Andrew

Powiązane problemy