Virtualenv: site.py nicht kompatibel mit Python 2.7

Erstellt am 9. Nov. 2012  ·  24Kommentare  ·  Quelle: pypa/virtualenv

Wir verwenden ausschließlich Python 2.7 und es ist eine Überraschung, heute zu entdecken, dass site.py in allen virtuellen Umgebungen mit Python 2.7 die site.py von py2.6 verwendet, der viele neue Funktionen fehlen, die in Python 2.7 hinzugefügt wurden.

Hilfreichster Kommentar

Als Problemumgehung: python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" schafft es , den Speicherort meines Verzeichnisses für Python-Site-Pakete zu finden

Alle 24 Kommentare

Können Sie ein Beispiel geben, was bei Ihnen nicht funktioniert?

site.getsitepackages() funktioniert nicht.

Reproduziert auf OS X:

$ virtualenv -p python2.7 ve
$ ./ve/bin/python -c 'import site; print(getattr(site, "getsitepackages"))'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'

Laufen außerhalb von Venv funktioniert für mich -

``` $ python -c 'import site; print(getattr(site, "getsitepackages"))' <function getsitepackages at 0x104198410>

``````

$ ./ve/bin/python -c 'Site importieren; print( site.file )'
/private/tmp/ve/lib/python2.7/site.pyc
$ python -c 'Site importieren; print( site.file )'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site.pyc

We ship our own `./virtualenv_embedded/site.py`

Erwägen Sie die Aktualisierung (und Gewährleistung der Abwärtskompatibilität) von site.py

Ich denke nicht, dass dies als Release-Blocker gekennzeichnet werden sollte. Obwohl es großartig wäre, Feature-kompatible site.py-Dateien zu unterstützen, besteht dieser Mangel seit Jahren.

„Dieser Mangel ist seit Jahren so“. Und ja, es tut immer noch weh... :(
Erwägen Sie, dieses PLZ zu reparieren, danke

Das hat mich heute gebissen; Es wäre wirklich, wirklich nett, ein aktualisiertes site.py in virtualenv enthalten zu bekommen, da die alte 2.6-Version Dinge wie site.getusersitepackages() nicht hat.

Es hat mich auch gebissen und mich unvorbereitet erwischt. Jetzt frage ich mich sogar, welche anderen Dateien sich vom System Python unterscheiden (insbesondere bei Verwendung --system-site-packages ) und welche anderen "Bugs" auf der Lauer liegen ...

Die Verwendung von virtualenv 13.1.2 mit Python 2.7.6 ist immer noch gültig, und es behindert einige Entwicklungsarbeiten, die ich mache.

Hier ist etwas interaktives Fummeln:

getsitepackages ist in virtualenv nicht vorhanden
$ virtualenv --version
13.1.2
$ virtualenv test
New python executable in test/bin/python
Installing setuptools, pip, wheel...done.
$ source test/bin/activate
$ which python
/home/user/test/bin/python
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> 'getsitepackages' in dir(site)
False
>>> site.getsitepackages()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'
>>>
getsitepackages ist im System Python vorhanden
$ deactivate
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> 'getsitepackages' in dir(site)
True
>>> site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
>>>

Bearbeiten: woah ...... Ich habe gerade gelesen: https://github.com/pypa/virtualenv/pull/697
Ich denke, die Zeit ist wahrscheinlich besser damit verbracht, die Grundursachen anzugehen, als dieses spezifische Symptom. Je nachdem, wie die Neufassung verläuft, bin ich gerne bereit, auf Änderungen zu warten, die zur Lösung dieses Problems erforderlich sind, zugunsten der in der Neufassung besprochenen Änderungen.

Ursprünglicher Kommentar:
Ich wurde auch gerade von diesem gebissen.

# Tried with and without --system-site-packages

[username@hostname] ~/dir $ virtualenv --system-site-packages venv
Using base prefix '/usr'
New python executable in venv/bin/python3.4
Also creating executable in venv/bin/python
Installing setuptools, pip, wheel...done.
[username@hostname] ~/dir $ venv/bin/python
Python 3.4.3 (default, Jul 28 2015, 18:20:59) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> site.getsitepackages()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'
>>> 

Bitte erwägen Sie, site.py zu aktualisieren, um site.getsitepackages() bereitzustellen

Treffen Sie dieses Problem mit #555, was in einer virtuellen Umgebung zu unterschiedlichem Verhalten führen kann, wenn Sie aufgrund der Verfallswarnung mit -Werror ausführen. Da tox davon abhängt, dass dieses Paket intern funktioniert, sehen Sie keinen großen Weg daran vorbei.

+1 sad_panda und viele Tränen

+1 das hat mich heute gebissen, Code funktioniert außerhalb von virtualenv, aber nicht innerhalb.

+1 Biss, gibt es ein Update? Danke.

+1 gleiches Problem mit rk (Remote-Kernel für Jupyter).

+1 Biss, funktioniert außerhalb von virtualenv, aber nicht innerhalb.

Alles in allem denke ich, dass derzeit die beste Lösung darin besteht, site.py (oder Teile davon) in Ihren Projekten anzubieten.

Als Problemumgehung: python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" schafft es , den Speicherort meines Verzeichnisses für Python-Site-Pakete zu finden

+1

+1 Biss, gibt es ein Update? Danke.

Ich verwende virtualenv 15.0.1 auf Ubuntu 16.04 64bit

+1 Biss
(virtualenv 15.1.0 auf CentOS 7.5.1804)

Seitdem ich zu py3 übergegangen bin, habe ich aufgehört, virtualenv zu verwenden, und ich verwende Pythons eigenes venv . Mit Python 3.6+ besteht ein minimalistisches venv nur aus ein paar Symlinks:

$ python3.6 -m venv --without-pip grut
$ tree grut/
grut/
├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── python -> python3.6
│   ├── python3 -> python3.6
│   └── python3.6 -> /usr/bin/python3.6
├── include
├── lib
│   └── python3.6
│       └── site-packages
├── lib64 -> lib
└── pyvenv.cfg

6 directories, 7 files

Also kein virtualenv mehr mit all seinen Macken für mich. HTH andere Leute.

@RemiCardona Ich verwende venv von Python 3 so oft ich kann, aber leider verwendet tox immer noch virtualenv (selbst beim Testen von Python 3), also bin ich von diesem Problem betroffen Jedes Mal, wenn ich tox verwende, um Tests zu automatisieren oder kontinuierliche Integration durchzuführen. 😞

Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität gab. Es wird geschlossen, wenn keine weiteren Aktivitäten stattfinden. Fügen Sie einfach einen Kommentar hinzu, wenn Sie ihn offen halten möchten. Vielen Dank für Ihre Beiträge.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen