安装使用悬崖开发的包时出错

时间:2016-11-16 21:03:17

标签: python command-line-parsing

我用悬崖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'

有什么建议吗?

1 个答案:

答案 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虚拟环境运行代码(以便升级的软件包不会覆盖系统软件包)也是技术上更好的解决方案。