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

Erstellt am 20. Mai 2015  ·  18Kommentare  ·  Quelle: PythonCharmers/python-future

Einfachster Nachbau:

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

Hilfreichster Kommentar

Für Ubuntu 14.04 hat diese Kombination für mich funktioniert:

  • Installieren Sie pip für Python 3.4 (https://pip.pypa.io/en/stable/installing/):
$ wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3.4
  • Ersetzen Sie die alte virtualenv (Python 2.7 bis Python 3.4):
$ sudo pip3.4 install virtualenv
  • Nur zur Kontrolle:
$ head -n 1 /usr/local/bin/virtualenv
#!/usr/bin/python3
  • Jetzt werden die folgenden Befehle ausgeführt:
$ 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
  • So vermeiden Sie Kompilierungsfehler von in C oder C++ geschriebenen Python-Erweiterungen ( 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

Tox läuft jetzt wunderbar :)

Alle 18 Kommentare

Dies ist ein Fehler in virtualenv , da er die 2.7- und 3.4-Modulpfade durcheinander bringt. Upstream wurden mehrere ähnliche Probleme gemeldet:
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

Verwenden Sie vorerst besser pyvenv , das mit Python 3.3+ geliefert wird.

pyvenv ist nicht wirklich eine Option für eine Codebasis, die auf 2+3 abzielt (insbesondere angesichts der vielen Randfälle, für die pyvenv nicht ganz korrekt ist (und nicht behoben werden kann, weil sie in der stdlib gestrandet sind)). Würde es jemals Pläne geben, die nützlichen Bits (Backports, Verschiebungen usw.) aus dem Shadowing von py3-Modulnamen zu trennen?

Danke, dass du das erwähnt hast, Anthony. Ich denke, dass ein Python 2.7 site-packages -Ordner, auf den ein Python 3.4-Interpreter zugreifen kann, im Allgemeinen zu vielen Brüchen führen wird. Daher stimme ich Elliott zu, dass dies ein Virtualenv-Fehler ist. (Vielleicht ein Wiederauftauchen von Bug #673.)

Ich muss zugeben, dass ich virtualenv seit 2 Jahren nicht mehr benutzt habe (seit ich Conda entdeckt habe). Ich werde versuchen, etwas Zeit zu finden, um weiter daran zu basteln, um zu sehen, was los ist. Aber wenn ich https://github.com/pypa/virtualenv/pull/697 lese, vermute ich eher, dass es sich um ein Vogelnest von spröden Hacks handelt ...

Könntest du auf die Frage eingehen? Wahrscheinlich gut zu schließen, da wontfix nach der Beantwortung, würde ich vermuten.

Würde es jemals Pläne geben, die nützlichen Bits (Backports, Verschiebungen usw.) aus dem Shadowing von py3-Modulnamen zu trennen?

@qulogic @edschofield Dies ist eigentlich ein Effekt des Pythonpath-Minings, das wir in unserem Unternehmen betreiben. Wir haben es inzwischen ausgeklammert.

mungen*

@bukzor ist es eigentlich nicht, siehe meine Reproduktion

Ich bin gerade auf dieses Problem gestoßen, es sieht so aus, als ob es in virtualenv 12.04 eingeführt wurde, ich habe ohne Probleme mit dem Anheften an virtualenv 12.02 begonnen

fwiw, dies ist das Commit, das es ermöglicht hat, von der Seite von virtualenv aus zu arbeiten: https://github.com/pypa/virtualenv/commit/73d46a83f6b26155398310d8dfd251015c751030

Es wurde jedoch später zurückgesetzt, weil es Probleme (?) unter Debian verursachte.

Ich habe mein eigenes Wrapper-Skript für virtualenv erstellt, das dieses Problem ebenfalls löst: https://github.com/asottile/virtualenv-hax

Hatte das gleiche Problem. Ein Downgrade auf virtualenv 12.0.2 löste das Problem.

Habe das gleiche Problem. Meine Version ist 13.1.2. Musste auf 12.0.2 heruntergestuft werden, wie Valerymelou erwähnte.

Ein Downgrade auf 12.0.2 hat bei mir auch funktioniert

Werden sie den Fehler beheben oder was?

Für Ubuntu 14.04 hat diese Kombination für mich funktioniert:

  • Installieren Sie pip für Python 3.4 (https://pip.pypa.io/en/stable/installing/):
$ wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3.4
  • Ersetzen Sie die alte virtualenv (Python 2.7 bis Python 3.4):
$ sudo pip3.4 install virtualenv
  • Nur zur Kontrolle:
$ head -n 1 /usr/local/bin/virtualenv
#!/usr/bin/python3
  • Jetzt werden die folgenden Befehle ausgeführt:
$ 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
  • So vermeiden Sie Kompilierungsfehler von in C oder C++ geschriebenen Python-Erweiterungen ( 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

Tox läuft jetzt wunderbar :)

Hallo Leute, ich habe eure Meinungen gesehen, und Fernandojunior-Empfehlungen funktionieren für mich, aber jetzt aktualisiere ich meine Virtualenv auf 14.0.5 und die Probleme sind in dieser Version behoben, derzeit arbeite ich in meinem Host mit Linuxmint 17.3 x64

Was tun, wenn derselbe Fehler auftritt, aber Conda-Umgebungen verwendet werden?

Wird geschlossen, da diese Konversation ins Stocken geraten ist und es anscheinend keine verbleibende Aktion für python-future gibt. Bitte nochmal öffnen falls ich mich irre :)

Yep Yep! Dies wurde im Projekt virtualenv umgangen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen