Python-future: virtualenv + python-future = virtualenv quebrado

Criado em 20 mai. 2015  ·  18Comentários  ·  Fonte: PythonCharmers/python-future

Reprodução mais simples:

$ 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.

Comentários muito úteis

Para o Ubuntu 14.04, esta combinação funcionou para mim:

  • Instale o pip para python 3.4 (https://pip.pypa.io/en/stable/installing/):
$ wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3.4
  • Substitua o antigo virtualenv (python 2.7 para python 3.4):
$ sudo pip3.4 install virtualenv
  • Só para verificar:
$ head -n 1 /usr/local/bin/virtualenv
#!/usr/bin/python3
  • Agora, os seguintes comandos serão executados:
$ 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
  • Para evitar erros de compilação de extensões Python escritas em C ou C++ ( ref ):
$ 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

Agora, o tox funciona lindamente :)

Todos 18 comentários

Este é um bug em virtualenv , pois está confundindo os caminhos dos módulos 2.7 e 3.4. Há vários problemas semelhantes relatados upstream:
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

Melhor usar pyvenv que vem com o Python 3.3+ por enquanto.

pyvenv não é realmente uma opção para uma base de código direcionada a 2 + 3 (especialmente considerando os muitos casos de borda para os quais o pyvenv não é muito correto (e não pode ser corrigido devido a estar preso no stdlib)). Haveria planos potenciais para dividir os bits úteis (backports, movimentos, etc.) do sombreamento dos nomes dos módulos py3?

Obrigado por mencionar isso, Antônio. Acho que ter uma pasta Python 2.7 site-packages acessível a um interpretador Python 3.4 levará a muitas quebras em geral. Então eu concordo com Elliott que este é um bug virtualenv. (Talvez um ressurgimento do bug #673.)

Devo admitir que não uso virtualenv há 2 anos (desde que descobri o conda). Vou tentar encontrar algum tempo para mexer com ele ainda mais para ver o que está acontecendo. Mas, lendo https://github.com/pypa/virtualenv/pull/697 , eu suspeito que seja um ninho de pássaros de hacks frágeis ...

Você poderia abordar a questão? Provavelmente não há problema em fechar, pois não será corrigido depois de responder, eu acho.

Haveria planos potenciais para dividir os bits úteis (backports, movimentos, etc.) do sombreamento dos nomes dos módulos py3?

@qulogic @edschofield Isso é realmente um efeito da mineração pythonpath que fazemos em nossa empresa. Nós já fatoramos isso.

mastigando*

@bukzor na verdade não, veja minha reprodução

Acabei de me deparar com esse problema, parece que estava sendo introduzido no virtualenv 12.04, comecei a fixar no virtualenv 12.02 sem problemas

fwiw, este é o commit que permitiu que funcionasse do lado do virtualenv: https://github.com/pypa/virtualenv/commit/73d46a83f6b26155398310d8dfd251015c751030

No entanto, foi revertido mais tarde devido a problemas (?) no debian.

Eu criei meu próprio script wrapper para virtualenv que também resolve esse problema: https://github.com/asottile/virtualenv-hax

Teve o mesmo problema. O downgrade para o virtualenv 12.0.2 resolveu o problema.

Vivenciando o mesmo problema. Minha versão é 13.1.2. Tive que fazer o downgrade para 12.0.2 como valerymelou mencionou.

downgrade para 12.0.2 funcionou para mim também

Eles vão corrigir o bug ou o quê?

Para o Ubuntu 14.04, esta combinação funcionou para mim:

  • Instale o pip para python 3.4 (https://pip.pypa.io/en/stable/installing/):
$ wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3.4
  • Substitua o antigo virtualenv (python 2.7 para python 3.4):
$ sudo pip3.4 install virtualenv
  • Só para verificar:
$ head -n 1 /usr/local/bin/virtualenv
#!/usr/bin/python3
  • Agora, os seguintes comandos serão executados:
$ 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
  • Para evitar erros de compilação de extensões Python escritas em C ou C++ ( ref ):
$ 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

Agora, o tox funciona lindamente :)

Oi pessoal eu vi suas opiniões, e as recomendações de fernandojunior funcionam para mim, mas agora atualizo meu virtualenv para 14.0.5 e os problemas são corrigidos nesta versão, atualmente estou trabalhando no meu host com linuxmint 17.3 x64

O que fazer ao obter o mesmo erro, mas usando ambientes conda?

Fechando porque esta conversa parou e parece não haver nenhuma ação restante para python-future . Por favor, reabra se posso estar enganado :)

sim Sim! Isso foi resolvido no projeto virtualenv

Esta página foi útil?
0 / 5 - 0 avaliações