2012-06-13 213 views
16

我正在嘗試使用需求文件安裝python軟件。pip無法從requirements.txt安裝軟件包

>> cat requirements.txt 
Cython==0.15.1 
numpy==1.6.1 
distribute==0.6.24 
logilab-astng==0.23.1logilab-common==0.57.1 
netaddr==0.7.6 
numexpr==2.0.1 
ply==2.5 
pycallgraph==0.5.1 
pyflowtools==0.3.4.1 
pylint==0.25.1 
tables==2.3.1 
wsgiref==0.1.2 

所以我創建了一個虛擬環境

>> mkvirtualenv parser 

(parser) 
>> pip freeze 
distribute==0.6.24 
wsgiref==0.1.2 

(parser) 
>> pip install -r requirements.txt 

...然後我的包下載,但不會有錯誤的安裝:http://pastie.org/4079800

(parser) 
>> pip freeze 
distribute==0.6.24 
wsgiref==0.1.2 

出人意料的是,如果我嘗試手動安裝每個軟件包,他們安裝得很好。 例如:

>> pip install numpy==1.6.1 

(parser) 
>> pip freeze 
distribute==0.6.24 
wsgiref==0.1.2 
numpy==1.6.1 

我迷路了。到底是怎麼回事?

PS:我使用pip v1.1和python V2.7.2與virtualenvvirtualenvwrapper

回答

15

它看起來像numexpr封裝在一個numpy的安裝時間依賴性。 Pip通過您的要求進行兩次傳遞:首先下載所有軟件包並運行每個軟件包的setup.py以獲取其元數據,然後將其全部安裝在第二遍中。

因此,numexpr試圖從setup.py中的numpy導入,但是當pip第一次運行numexpr的setup.py時,它尚未安裝numpy。

這也是爲什麼當您逐個安裝軟件包時沒有看到此錯誤的原因:如果您一次安裝一個軟件包,numpy將在您的環境中完全安裝,然後才能在pip install numexpr之前安裝。

唯一的解決辦法是安裝pip install numpy你曾經運行pip install -r requirements.txt之前 - 你將不能夠使用單個requirements.txt文件,這樣做在一個單一的命令。

此處瞭解詳情:https://github.com/pypa/pip/issues/25

+2

這看起來像在numexpr包裝的bug;它的setup.py應該修改爲只能從numpy導入,如果你實際構建它,通過捕獲'ImportError'並在沒有'extra_setup_opts'的情況下繼續,如果你只是運行'setup.py egg_info'。 – ejucovy

+3

我們(pip)可能應該有一個關於此的指南,或者至少可以鏈接到現有的文檔。 – 2012-06-13 15:18:23

+2

你應該[用數學文件](http://code.google.com/p/numexpr/issues/entry)與numexpr – jterrace