Python-future: virtualenv + python-future = 损坏的 virtualenv

创建于 2015-05-20  ·  18评论  ·  资料来源: PythonCharmers/python-future

最简单的复制:

$ virtualenv venv
$ ./venv/bin/pip install future virtualenv
Collecting future
  Using cached future-0.14.3.tar.gz
Collecting virtualenv
  Using cached virtualenv-12.1.1-py2.py3-none-any.whl
Installing collected packages: future, virtualenv
  Running setup.py install for future
Successfully installed future-0.14.3 virtualenv-12.1.1
$ ./venv/bin/virtualenv -ppython3.4 venv34
Running virtualenv with interpreter /usr/bin/python3.4
Traceback (most recent call last):
  File "/home/anthony/venv/local/lib/python2.7/site-packages/virtualenv.py", line 8, in <module>
    import base64
  File "/usr/lib/python3.4/base64.py", line 9, in <module>
    import re
  File "/usr/lib/python3.4/re.py", line 336, in <module>
    import copyreg
  File "/home/anthony/venv/lib/python2.7/site-packages/copyreg/__init__.py", line 7, in <module>
    raise ImportError('This package should not be accessible on Python 3. '
ImportError: This package should not be accessible on Python 3. Either you are trying to run from the python-future src folder or your installation of python-future is corrupted.

最有用的评论

对于 Ubuntu 14.04,这种组合对我有用:

  • 为 python 3.4 安装 pip (https://pip.pypa.io/en/stable/installing/):
$ wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3.4
  • 替换旧的 virtualenv(python 2.7 到 python 3.4):
$ sudo pip3.4 install virtualenv
  • 只是为了检查:
$ head -n 1 /usr/local/bin/virtualenv
#!/usr/bin/python3
  • 现在,将运行以下命令:
$ virtualenv venv34
Using base prefix '/usr'
New python executable in venv34/bin/python3
Also creating executable in venv34/bin/python
Installing setuptools, pip, wheel...done.

$ ./venv34/bin/pip install virtualenv
Collecting virtualenv
  Using cached virtualenv-13.1.2-py2.py3-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv-13.1.2

$ ./venv34/bin/virtualenv -p python venv
Running virtualenv with interpreter /usr/bin/python
New python executable in venv/bin/python
Installing setuptools, pip, wheel...done.

$ /usr/bin/python --version
Python 2.7.6

$ ./venv/bin/pip install future virtualenv
Collecting future
Collecting virtualenv
  Using cached virtualenv-13.1.2-py2.py3-none-any.whl
Installing collected packages: future, virtualenv
Successfully installed future-0.15.2 virtualenv-13.1.2

$ ./venv34/bin/pip install future
Collecting future
Installing collected packages: future
Successfully installed future-0.15.2
  • 为了避免用 C 或 C++ ( ref ) 编写的 Python 扩展产生编译错误:
$ sudo apt-get update
$ sudo apt-get install -y build-essential
$ sudo apt-get install -y python3.4-dev
$ sudo apt-get install -y python3-software-properties

现在,tox 运行得很漂亮:)

所有18条评论

这是virtualenv中的一个错误,因为它混淆了 2.7 和 3.4 模块路径。 上游报告了几个类似的问题:
https://github.com/pypa/virtualenv/issues/745
https://github.com/pypa/virtualenv/issues/671
https://github.com/pypa/virtualenv/issues/625
https://github.com/pypa/virtualenv/pull/697

现在最好使用 Python 3.3+ 附带的pyvenv

pyvenv 并不是针对 2+3 的代码库的真正选择(特别是考虑到 pyvenv 不完全正确的许多边缘情况(并且由于被困在 stdlib 中而无法修复))。 是否有潜在的计划将有用的位(反向移植、移动等)从 py3 模块名称的阴影中分离出来?

谢谢你提到这一点,安东尼。 我认为拥有可供 Python 3.4 解释器访问的 Python 2.7 site-packages文件夹通常会导致大量损坏。 所以我同意 Elliott 的观点,即这是一个 virtualenv 错误。 (也许是 bug #673 的重新浮出水面。)

我必须承认我已经有 2 年没有使用 virtualenv 了(自从我发现了 conda)。 我会试着找点时间进一步修改它,看看发生了什么。 但是,阅读https://github.com/pypa/virtualenv/pull/697 ,我宁愿怀疑这是一个脆弱的黑客鸟巢......

你能解决这个问题吗? 在回答我猜想之后可能会很好地关闭。

是否有潜在的计划将有用的位(反向移植、移动等)从 py3 模块名称的阴影中分离出来?

@qulogic @edschofield这实际上是我们在公司进行的 pythonpath 挖掘的效果。 我们已经把它考虑在内了。

吃货*

@bukzor实际上不是,看看我的复制品

我刚刚遇到这个问题,看起来它是在 virtualenv 12.04 中引入的,我已经开始固定到 virtualenv 12.02 没有问题

fwiw,这是使它能够从 virtualenv 方面工作的提交: https ://github.com/pypa/virtualenv/commit/73d46a83f6b26155398310d8dfd251015c751030

然而,由于在 debian 上引起问题(?),它后来被恢复了。

我为 virtualenv 创建了自己的包装脚本,也解决了这个问题: https ://github.com/asottile/virtualenv-hax

有同样的问题。 降级到 virtualenv 12.0.2 解决了这个问题。

遇到同样的问题。 我的版本是 13.1.2。 正如 valerymelou 所提到的,不得不降级到 12.0.2。

降级到 12.0.2 也对我有用

他们是要修复错误还是什么?

对于 Ubuntu 14.04,这种组合对我有用:

  • 为 python 3.4 安装 pip (https://pip.pypa.io/en/stable/installing/):
$ wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3.4
  • 替换旧的 virtualenv(python 2.7 到 python 3.4):
$ sudo pip3.4 install virtualenv
  • 只是为了检查:
$ head -n 1 /usr/local/bin/virtualenv
#!/usr/bin/python3
  • 现在,将运行以下命令:
$ virtualenv venv34
Using base prefix '/usr'
New python executable in venv34/bin/python3
Also creating executable in venv34/bin/python
Installing setuptools, pip, wheel...done.

$ ./venv34/bin/pip install virtualenv
Collecting virtualenv
  Using cached virtualenv-13.1.2-py2.py3-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv-13.1.2

$ ./venv34/bin/virtualenv -p python venv
Running virtualenv with interpreter /usr/bin/python
New python executable in venv/bin/python
Installing setuptools, pip, wheel...done.

$ /usr/bin/python --version
Python 2.7.6

$ ./venv/bin/pip install future virtualenv
Collecting future
Collecting virtualenv
  Using cached virtualenv-13.1.2-py2.py3-none-any.whl
Installing collected packages: future, virtualenv
Successfully installed future-0.15.2 virtualenv-13.1.2

$ ./venv34/bin/pip install future
Collecting future
Installing collected packages: future
Successfully installed future-0.15.2
  • 为了避免用 C 或 C++ ( ref ) 编写的 Python 扩展产生编译错误:
$ sudo apt-get update
$ sudo apt-get install -y build-essential
$ sudo apt-get install -y python3.4-dev
$ sudo apt-get install -y python3-software-properties

现在,tox 运行得很漂亮:)

嗨,伙计们,我看到了您的意见,fernandojunior 建议对我有用,但是现在我将 virtualenv 更新到 14.0.5,并且此版本已解决问题,目前我正在使用 linuxmint 17.3 x64 在我的主机上工作

遇到相同错误但使用 conda 环境时该怎么办?

关闭,因为此对话已停止并且python-future似乎没有剩余的操作。 如果我可能弄错了,请重新打开:)

对对对! 这在virtualenv项目中得到了解决

此页面是否有帮助?
0 / 5 - 0 等级