2016-11-16 48 views
0

我在筆記本電腦(Mac,Python 2.7.12)上測試過,我用懸崖2.3.0寫了一個命令行工具。當我試圖將一個服務器(Linux的,Python的2.7.2)上安裝它(python setup.py install),我遇到了這個錯誤:使用懸崖開發安裝包時出錯

Installed /private/tmp/easy_install-EGMO15/cliff-2.3.0/pbr-1.10.0-py2.7.egg 

ERROR:root:Error parsing 

Traceback (most recent call last): File "/private/tmp/easy_install-EGMO15/cliff-2.3.0/pbr-1.10.0-> py2.7.egg/pbr/core.py", line 111, in pbr 
    attrs = util.cfg_to_args(path, dist.script_args) File "/private/tmp/easy_install-EGMO15/cliff-2.3.0/pbr-1.10.0-py2.7.egg/pbr/util.py", line 248, in cfg_to_args 
    kwargs = setup_cfg_to_setup_kwargs(config, script_args) File "/private/tmp/easy_install-EGMO15/cliff-2.3.0/pbr-1.10.0-py2.7.egg/pbr/util.py", line 431, in setup_cfg_to_setup_kwargs 
    if pkg_resources.evaluate_marker('(%s)' % env_marker): 

AttributeError: 'module' object has no attribute 'evaluate_marker' error: Setup script exited with error in setup command: Error parsing /private/tmp/easy_install-EGMO15/cliff-2.3.0/setup.cfg: AttributeError: 'module' object has no attribute 'evaluate_marker' 

有什麼建議?

回答

1

看起來您的服務器可能安裝了(很多)setuptools軟件包的舊版本(它提供了pkg_resources模塊)。 evaluate_marker方法看起來好像它在2014年底第一次顯示,所以如果您使用的是較舊的系統,則該方法可能無法使用。

根據您的環境,您可能只需要pip install -U setuptools,或者您可能需要查看您的發行版是否具有更新的可用的軟件包。

如果您可以更新您的問題以包含有關您的服務器運行環境的詳細信息(您正在運行的是什麼發行版和版本,什麼版本的Python,什麼版本的setuptools?),我們可以提供更完整的答案。

更新

例如,Ubuntu的12.04只有setuptools的0.6,並且pkg_resources模塊(其被封裝在python-pkg-resources包)不具有evaluate_marker方法:

# python 
Python 2.7.3 (default, Jun 22 2015, 19:33:41) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pkg_resources 
>>> pkg_resources.evaluate_marker 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'evaluate_marker' 

在這種環境,我可以安裝pip

# apt-get install python-pip 

再升級的setuptools安裝的版本:

# pip install -U setuptools 

現在:

# python 
Python 2.7.3 (default, Jun 22 2015, 19:33:41) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pkg_resources 
>>> pkg_resources.evaluate_marker 
<function evaluate_marker at 0x1535050> 
>>> 

NB升級包分配(例如,在這個例子中通過apt-get安裝的東西)使用pip常常會導致悲傷和心痛,如果您能夠將底層環境升級到無需此類解決方法的地方,您的狀況會好得多。另外,從Python虛擬環境運行你的代碼(這樣你的升級包不會覆蓋系統包)也是一個技術上更好的解決方案。