无法使用 Python 3.2 创建 virtualenv。谁不知道? Pip 或 setuptools 或 Python 2.7?

Can't create virtualenv using Python 3.2. Whodunnit? Pip or setuptools or Python 2.7?

我无法使用 virtualenvwrapper 正确安装基于 Python 3.2 的虚拟环境。我遇到了一堵神秘的墙,现在我正在寻找更多的选择来解决我的 WHODUNNIT?困境。

一些背景

我首先尝试使用来自 Python 2.7(系统的 Python 默认值)的 pip 1.5.6 安装 virtualenvwrapper。当我试图 uninstall/upgrade 我的 pip 时,我以某种方式弄坏了它。现在,如果我尝试:

$ pip 
    Traceback (most recent call last):
  File "/usr/local/lib/python3.2/dist-packages/distribute-0.6.28-py3.2.egg/pkg_resources.py", line 2816, in <module>
    working_set.require(__requires__)
  File "/usr/local/lib/python3.2/dist-packages/distribute-0.6.28-py3.2.egg/pkg_resources.py", line 690, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/local/lib/python3.2/dist-packages/distribute-0.6.28-py3.2.egg/pkg_resources.py", line 592, in resolve
    raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (pip 7.1.2 (/usr/local/lib/python3.2/dist-packages), Requirement.parse('pip==1.5.6'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/local/lib/python3.2/dist-packages/distribute-0.6.28-py3.2.egg/pkg_resources.py", line 2820, in <module>
    parse_requirements(__requires__), Environment()
  File "/usr/local/lib/python3.2/dist-packages/distribute-0.6.28-py3.2.egg/pkg_resources.py", line 588, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pip==1.5.6

不过,我还是安装了 PIP3.2。

$ pip3.2 --version
pip 7.1.2 from /usr/local/lib/python3.2/dist-packages (python 3.2)

所以我继续安装 virtualenvwrapper 没有问题:

$ sudo pip3.2 install virtualenvwrapper

这是 Python 3.2 所在的地方

$ whereis python3.2.3 
whereis python3.2.3
python3.2: /usr/bin/python3.2 /etc/python3.2 /usr/lib/python3.2 /usr/bin/X11/python3.2 /usr/local/lib/python3.2 /usr/include/python3.2 /opt/Python-3.2/bin/python3.2 /usr/share/man/man1/python3.2.1.gz

这是我的 virtualenv 版本:

$ virtualenv --version
14.0.6

错误

在创建 virtualenv 之前我修改了我的 .bashrc

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/admin/workspace
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh

获取它之后(即 source ~/.bashrc)我无法启动 virtualenv。

$ mkvirtualenv --python=/usr/bin/python3.2 venv
Running virtualenv with interpreter /usr/bin/python3.2
New python executable in /home/admin/.virtualenvs/venv/bin/python3.2
Also creating executable in /home/admin/.virtualenvs/venv/bin/python
/usr/local/lib/python3.2/dist-packages/virtualenv-14.0.6-py3.2.egg/virtualenv_support/pip-8.0.2-py2.py3-none-any.whl/pip/_vendor/pkg_resources/__init__.py:87: UserWarning: Support for Python 3.0-3.2 has been dropped. Future versions will fail here.
Traceback (most recent call last):
  File "/usr/local/lib/python3.2/dist-packages/virtualenv-14.0.6-py3.2.egg/virtualenv.py", line 2304, in <module>
    main()
  File "/usr/local/lib/python3.2/dist-packages/virtualenv-14.0.6-py3.2.egg/virtualenv.py", line 705, in main
    symlink=options.symlink)
  File "/usr/local/lib/python3.2/dist-packages/virtualenv-14.0.6-py3.2.egg/virtualenv.py", line 924, in create_environment
    download=download,
  File "/usr/local/lib/python3.2/dist-packages/virtualenv-14.0.6-py3.2.egg/virtualenv.py", line 843, in install_wheel
    cert_data = pkgutil.get_data("pip._vendor.requests", "cacert.pem")
  File "/usr/lib/python3.2/pkgutil.py", line 573, in get_data
    loader = get_loader(package)
  File "/usr/lib/python3.2/pkgutil.py", line 461, in get_loader
    return find_loader(fullname)
  File "/usr/lib/python3.2/pkgutil.py", line 471, in find_loader
    for importer in iter_importers(fullname):
  File "/usr/lib/python3.2/pkgutil.py", line 427, in iter_importers
    __import__(pkg)
  File "/usr/local/lib/python3.2/dist-packages/virtualenv-14.0.6-py3.2.egg/virtualenv_support/pip-8.0.2-py2.py3-none-any.whl/pip/__init__.py", line 15, in <module>

如果我输入错误后...

$ workon
$

有趣的是 venv 是在 .virtualenvs 中创建的

可能原因

在网络上的其他地方阅读(我发现只有一个人有类似的问题)它可以使用以前版本的 virtualenv 解决(我试过没有成功),或者我可能使用了不正确的组合pip and/or virtualenv and/or virtualenvwrapper。或者可能是我的 Python2.7 在后台乱搞。

更新:设置工具

或者设置工具呢? Apparently it has to do。尝试使用 PIP 1.5.6

时出现此错误
 UserWarning: Support for Python 3.0-3.2 has been dropped. Future versions will fail here.
 warnings.warn(msg)

另一项更新:修复了原始点

我设法使用以下方法修复了原始 pip:

$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ pip --version 
pip 8.0.3 from /usr/local/lib/python2.7/dist-packages (python 2.7)

更新:Virtualwrapper 不是!

在我自己的 'Whodunnit' 传奇中,我会说 virtualwrapper 无关。这里:

$ virtualenv -p /usr/bin/python3.2 ~/.virtualenvs/venv32
Running virtualenv with interpreter /usr/bin/python3.2
New python executable in /home/admin/.virtualenvs/venv32/bin/python3.2
Also creating executable in /home/admin/.virtualenvs/venv32/bin/python
/usr/local/lib/python2.7/dist-packages/virtualenv_support/pip-8.0.2-py2.py3-none-any.whl/pip/_vendor/pkg_resources/__init__.py:87: UserWarning: Support for Python 3.0-3.2 has been dropped. Future versions will fail here.

但问题依然存在。我还能尝试什么?

提前致谢!

如果您想使用 Python 3.2,您必须使用 pip < 8 和 virtualenv < 14。另见 https://virtualenv.pypa.io/en/latest/changes.html#id7

为什么要用远古Python3.2?您可以做的最好的事情就是安装和使用更高级的 Python >= 3.4。