Python-future: virtualenv + python-future = virtualenv cassé

Créé le 20 mai 2015  ·  18Commentaires  ·  Source: PythonCharmers/python-future

Reproduction la plus simple :

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

Commentaire le plus utile

Pour Ubuntu 14.04, cette combinaison a fonctionné pour moi :

  • Installez pip pour python 3.4 (https://pip.pypa.io/en/stable/installing/) :
$ wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3.4
  • Remplacez l'ancien virtualenv (python 2.7 à python 3.4) :
$ sudo pip3.4 install virtualenv
  • Juste pour vérifier :
$ head -n 1 /usr/local/bin/virtualenv
#!/usr/bin/python3
  • Maintenant, les commandes suivantes s'exécuteront :
$ 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
  • Pour éviter les erreurs de compilation des extensions Python écrites en 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

Maintenant, tox fonctionne à merveille :)

Tous les 18 commentaires

Il s'agit d'un bogue dans virtualenv car il embrouille les chemins des modules 2.7 et 3.4. Plusieurs problèmes similaires ont été signalés en amont :
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

Mieux vaut utiliser pyvenv fourni avec Python 3.3+ pour le moment.

pyvenv n'est pas vraiment une option pour une base de code ciblant 2 + 3 (en particulier compte tenu des nombreux cas de bord pour lesquels pyvenv n'est pas tout à fait correct (et ne peut pas être corrigé car il est bloqué dans la stdlib)). Y aurait-il un jour des plans potentiels pour séparer les éléments utiles (rétroportages, déplacements, etc.) de l'occultation des noms de modules py3 ?

Merci de le mentionner, Antoine. Je pense qu'avoir un dossier Python 2.7 site-packages accessible à un interpréteur Python 3.4 entraînera beaucoup de casse en général. Je suis donc d'accord avec Elliott qu'il s'agit d'un bogue virtualenv. (Peut-être un resurfaçage du bug #673.)

Je dois avouer que je n'ai pas utilisé virtualenv depuis 2 ans (depuis que j'ai découvert conda). Je vais essayer de trouver un peu de temps pour bricoler davantage pour voir ce qui se passe. Mais, en lisant https://github.com/pypa/virtualenv/pull/697 , je soupçonne plutôt que c'est un nid d'oiseau de hacks cassants ...

Pourriez-vous répondre à la question? Probablement bien de fermer car wontfix après avoir répondu, je suppose.

Y aurait-il un jour des plans potentiels pour séparer les éléments utiles (rétroportages, déplacements, etc.) de l'occultation des noms de modules py3 ?

@qulogic @edschofield C'est en fait un effet de l'extraction de pythonpath que nous effectuons dans notre entreprise. Nous l'avons depuis pris en compte.

munging*

@bukzor ce n'est en fait pas, voir ma reproduction

Je viens de rencontrer ce problème, on dirait qu'il a été introduit dans virtualenv 12.04, j'ai commencé à épingler à virtualenv 12.02 sans problèmes

fwiw, c'est le commit qui lui a permis de fonctionner du côté de virtualenv : https://github.com/pypa/virtualenv/commit/73d46a83f6b26155398310d8dfd251015c751030

Il a cependant été annulé plus tard en raison de problèmes (?) sur Debian.

J'ai créé mon propre script wrapper pour virtualenv qui résout également ce problème : https://github.com/asottile/virtualenv-hax

Avait le même problème. La rétrogradation vers virtualenv 12.0.2 a résolu le problème.

Vivre le même problème. Ma version est 13.1.2. J'ai dû rétrograder à 12.0.2 comme l'a mentionné valerymelou.

la rétrogradation vers 12.0.2 a fonctionné pour moi aussi

Vont-ils corriger le bug ou quoi ?

Pour Ubuntu 14.04, cette combinaison a fonctionné pour moi :

  • Installez pip pour python 3.4 (https://pip.pypa.io/en/stable/installing/) :
$ wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3.4
  • Remplacez l'ancien virtualenv (python 2.7 à python 3.4) :
$ sudo pip3.4 install virtualenv
  • Juste pour vérifier :
$ head -n 1 /usr/local/bin/virtualenv
#!/usr/bin/python3
  • Maintenant, les commandes suivantes s'exécuteront :
$ 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
  • Pour éviter les erreurs de compilation des extensions Python écrites en 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

Maintenant, tox fonctionne à merveille :)

Salut les gars, j'ai vu vos opinions, et les recommandations de fernandojunior fonctionnent pour moi, mais maintenant je mets à jour mon virtualenv à 14.0.5 et les problèmes sont résolus dans cette version, actuellement je travaille dans mon hôte avec linuxmint 17.3 x64

Que faire lorsque vous obtenez la même erreur mais que vous utilisez des environnements conda ?

Clôture car cette conversation est au point mort et il ne semble plus y avoir d'action restante pour python-future . Merci de rouvrir si je peux me tromper :)

Oui oui! Cela a été contourné dans le virtualenv

Cette page vous a été utile?
0 / 5 - 0 notes