我用悬崖2.3.0编写了一个命令行工具,在我的笔记本电脑上测试过(Mac,Python 2.7.12)。当我尝试在服务器(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'
有什么建议吗?
答案 0 :(得分: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虚拟环境运行代码(以便升级的软件包不会覆盖系统软件包)也是技术上更好的解决方案。