2012-01-16 73 views
17

我使用pip requirements file來維護我的項目的依賴項列表。如何在pip凍結的需求文件中維護pip安裝選項?

現在我發現自己不必安裝使用pip install --install-option='some-setup.py.option'pip freeze中未記錄其輸出這些選項,我保存在我的項目的requirements.txt庫。這會導致問題,因爲新計算機上的一個簡單的pip install -r requirements.txt會安裝所有依賴項,而不爲這個庫提供所需的參數,並且我失去了簡單的往返操作。

所以,我的第2部分的問題是:

  • 是否有維持點子安裝在PIP凍結輸出以某種方式選擇的方法嗎?
  • 如果沒有,是否有辦法手動破解需求文件以添加安裝選項?如果必須,我可以丟失pip freeze的往返性質,並切換到需求文件的手動維護。我檢查了documentation,但看不到任何幫助。

沒有必要,而且可能有趣的細節,遵循

我想安裝pymongowithout building the C extension這樣我就可以在eventlet基於異步應用程序使用它。

安裝根據需要,並建立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 

在新的virtualenv,嘗試從requirements.txt安裝同一個項目。 PIP構建C擴展的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... 

更新 Issue 271 2011年4月對PIP打開請求指定每行--install-option在requirements.txt的能力。如果您遇到同樣的問題,請爲此問題投票。

+0

如果您手動將--install-option =' - no_ext'添加到需求文件,它是否工作? - 如果沒有,我懷疑你需要請求小工具開發人員添加此功能(這是一個好主意!) – d3vid 2012-02-06 12:10:35

+2

@ d3vid這不行,我害怕。已經有一個功能請求,於2011年4月開放:https://github.com/pypa/pip/issues/271。請在那裏添加你的+1。 – Day 2012-02-07 00:01:05

回答

12

從版本7.0(發佈2015-05-21),pip有能力從需求文件解析--install-option--global-option。現在應該可以有下面這行你requirements.txt

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

更多信息,可以發現herehere

+1

Plz修復第一個鏈接到https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40 – y0prst 2016-07-07 09:01:48

+0

這是什麼版本的點子? – hlin117 2017-04-16 07:49:44

+0

@ hlin117根據[第一個鏈接](https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40)看起來像版本7.0以上。 – Day 2017-07-14 17:16:25

5

這可能太天真了,但是如果你手動管理需求和相應的選項是很好的 - 爲什麼不把它們作爲一個包含整個pip咒語的小shell腳本來維護?只是一個解決方法,直到聽取功能請求:)

+1

在這段時間裏,訣竅是。 – Day 2012-02-29 23:32:36

+0

我有同樣的問題,我覺得有點愚蠢,沒有拿出這個自己。感謝您發佈此建議! – kungphu 2013-02-01 15:36:56

+0

打破了'requirements.txt'約定,這很糟糕,因爲它打破了下游的東西,例如http://docs.saltstack.com/en/latest/ref/states/all/salt.states.pip_state.html#salt .states.pip_state.installed。但是,這顯然是在這裏需要的。 – Andrew 2015-03-04 19:18:00