Python-future: virtualenv + python-future = сломанный virtualenv

Созданный на 20 мая 2015  ·  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 эта комбинация сработала для меня:

  • Установите pip для python 3.4 (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
  • Чтобы избежать ошибок компиляции из-за расширений Python, написанных на C или C++ ( ссылка ):
$ 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

На данный момент лучше использовать pyvenv , который поставляется с Python 3.3+.

pyvenv на самом деле не вариант для кодовой базы, ориентированной на 2 + 3 (особенно с учетом многих крайних случаев, для которых pyvenv не совсем корректен (и не может быть исправлен из-за того, что он застрял в stdlib)). Будут ли когда-нибудь потенциальные планы по отделению полезных битов (бэкпортов, перемещений и т. д.) от затенения имен модулей py3?

Спасибо, что упомянул об этом, Энтони. Я думаю, что наличие папки Python 2.7 site-packages , доступной для интерпретатора Python 3.4, в целом приведет к большому количеству поломок. Так что я согласен с Эллиоттом, что это ошибка virtualenv. (Возможно, повторное появление ошибки № 673.)

Я должен признать, что я не использовал virtualenv в течение 2 лет (с тех пор, как я обнаружил 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. Пришлось перейти на 12.0.2, как упомянул valerymelou.

понижение до 12.0.2 тоже сработало для меня

Они собираются исправить ошибку или что?

Для Ubuntu 14.04 эта комбинация сработала для меня:

  • Установите pip для python 3.4 (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
  • Чтобы избежать ошибок компиляции из-за расширений Python, написанных на C или C++ ( ссылка ):
$ 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 рейтинги