为什么我的virtualenv能找到distutils.sysconfig?

时间:2015-01-18 16:11:38

标签: python virtualenv tox

我刚刚分叉了一个用测试驱动开发构建的Python项目。我当然看到它的价值,我期待着进一步利用它。

我使用pyenv安装了所有必需的Python解释器(请参阅tox.ini)。运行tox -r,我最终遇到2.6的以下问题(我有其他问题,但我可以解决的问题):

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 20, in <module>
    import distutils.sysconfig
ImportError: No module named distutils.sysconfig

ERROR: InvocationError: /home/wxl/.pyenv/shims/python2.6 /usr/lib/python2.7/dist-packages/virtualenv.py --setuptools --python /home/wxl/.pyenv/shims/python2.6 py26 (see /home/wxl/dev/git/blogofobe/.tox/py26/log/py26-0.log)

显然这不是代码的问题,而是试图调用virtualenv。回溯似乎暗示它与缺少的模块有关,但那些应该在标准库中,即使在2.6中也是如此。

有趣的是,如果我运行python2.6并尝试import distutils.sysconfig则失败。另一方面,如果我使用pyenv shell 2.6.9切换到该版本并尝试相同的操作,它可以正常工作。

我错过了什么?

FWIW,我在Ubuntu 14.04和

$ python --version
Python 2.7.6

$ python2.7 --version
Python 2.7.6

$ python2.6 --version
Python 2.6.9

1 个答案:

答案 0 :(得分:3)

看起来你正在使用Debian提供的virtualenv和pyenv的python。这可能无法正常工作,因为Debian修补了site.py,distutils,sysconfig以及您尝试使用的virtualenv来对已安装的python的文件布局做出某些假设。 dist-packages是Debian特定python补丁的明确指标。

这些假设打破了pyenv安装的标准python。解决方案是在pyenv python中安装virtualenv,例如:

/home/wxl/.pyenv/shims/pip-2.6 install virtualenv

如果您没有pip垫片,请使用:

/home/wxl/.pyenv/shims/easy_install-2.6 pip virtualenv

不要忘记通过运行pyenv rehash

来重新生成填充程序
相关问题