4

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

我已经tox.ini使用pyenv. 运行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
4

1 回答 1

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 shim,请使用以下命令:

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

不要忘记通过运行重新生成垫片pyenv rehash

于 2015-01-21T21:23:47.833 回答