安装 IMAPClient 时出现“所需的分发版本不可用”

安装 IMAPClient 时出现“所需的分发版本不可用”

当我运行命令“easy_install imapclient”时收到以下错误:

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package distribute
root@localhost:/var/www/somedir# easy_install imapclient
install_dir /usr/local/lib/python2.6/dist-packages/
Searching for imapclient
Reading http://pypi.python.org/simple/imapclient/
Reading http://freshfoo.com/wiki/CodeIndex
Reading http://imapclient.freshfoo.com/
Best match: IMAPClient 0.8.1
Downloading http://freshfoo.com/projects/IMAPClient/IMAPClient-0.8.1.zip
Processing IMAPClient-0.8.1.zip
Running IMAPClient-0.8.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-BmlBbm/IMAPClient-0.8.1/egg-dist-tmp-5OVaNN
The required version of distribute (>=0.6.24) is not available,
and can't be installed while this script is running. Please
install a more recent version first, using
'easy_install -U distribute'.

(Currently using distribute 0.6.14 (/usr/lib/python2.6/dist-packages))
error: Setup script exited with 2

您认为这可能是什么原因造成的?

我尝试按照上述输出的建议运行“easy_install -U deliver”,它返回以下输出:

install_dir /usr/local/lib/python2.6/dist-packages/
Searching for distribute
Reading http://pypi.python.org/simple/distribute/
Reading http://packages.python.org/distribute
Best match: distribute 0.6.24
Processing distribute-0.6.24-py2.6.egg
distribute 0.6.24 is already the active version in easy-install.pth
Installing easy_install script to /usr/local/bin
Installing easy_install-2.6 script to /usr/local/bin

Using /usr/local/lib/python2.6/dist-packages/distribute-0.6.24-py2.6.egg
Processing dependencies for distribute
Finished processing dependencies for distribute

如果有帮助的话,我正在运行 Ubuntu 10.04 64 位服务器。

答案1

我确信这不是正确的方法这样做,但对我来说是有效的。我修改了 /usr/bin/easy_install 脚本并删除了分发的版本约束,因此它现在看起来像这样:

#! /usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'distribute','console_scripts','easy_install'
__requires__ = 'distribute'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('distribute', 'console_scripts', 'easy_install')()
    )

答案2

我在同一版本的 Ubuntu(但 32 位而不是 64 位)上遇到了同样的问题。

问题是,我们旧版本的 pip 和 easy_install 试图安装较新的 python 模块,而这些模块需要的版本distribute比我们的 pip/easy_install 版本要新。正如 X-Cubed 指出的那样,easy_install(因此是 pip)需要特定的旧版本的 deliver。X-Cubed 的解决方案对我有用,但我没有删除版本,而是将其设置为最低版本,以便其他 easy_install(和 pip)在必要时可以要求较低的版本。因此,更改的 /usr/bin/easy_install 行是:

__requires__ = 'distribute>0.6.10'

load_entry_point('distribute>0.6.10', 'console_scripts', 'easy_install')()

大概distribute玩得很好,而且总是反向兼容。如果这样,这将比 easy_install 需要特定版本的 distributor 而引起的问题更少,而后者对许多 python 模块不起作用。

然后我重新运行 pip 以满足我的要求(pip install requirements/*),它需要URLObjectpython 模块,在我进行此更改后,它顺利解决了版本冲突问题。(因此 X-Cubed 至少部分正确,可能 100%正确)。

这个 sed 也可以修复它

sudo sed -i -r -e 's/distribute==/distribute>/g' /usr/bin/easy_install

相关内容