我刚刚分叉了一个用测试驱动开发构建的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
答案 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