为什么我的 virtualenv 找不到 distutils.sysconfig?
why can't my virtualenv find distutils.sysconfig?
我刚刚创建了一个 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
看来您正在使用 Debian 提供的 virtualenv 和来自 pyenv 的 python。这无法正常工作,因为 Debian 已经修补了 site.py、distutils、sysconfig,可能还有你试图用来对已安装 python 的文件布局做出某些假设的 virtualenv。 dist-packages 是 Debian 特定 python 补丁的明确指标。
这些假设不符合 pyenv 安装的标准 python。解决方法是在pyenv里面安装virtualenvpython,eg:
/home/wxl/.pyenv/shims/pip-2.6 install virtualenv
如果你没有 pip shim,那么使用这个:
/home/wxl/.pyenv/shims/easy_install-2.6 pip virtualenv
不要忘记通过 运行 pyenv rehash
重新生成垫片
我刚刚创建了一个 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
看来您正在使用 Debian 提供的 virtualenv 和来自 pyenv 的 python。这无法正常工作,因为 Debian 已经修补了 site.py、distutils、sysconfig,可能还有你试图用来对已安装 python 的文件布局做出某些假设的 virtualenv。 dist-packages 是 Debian 特定 python 补丁的明确指标。
这些假设不符合 pyenv 安装的标准 python。解决方法是在pyenv里面安装virtualenvpython,eg:
/home/wxl/.pyenv/shims/pip-2.6 install virtualenv
如果你没有 pip shim,那么使用这个:
/home/wxl/.pyenv/shims/easy_install-2.6 pip virtualenv
不要忘记通过 运行 pyenv rehash