Ich hatte den Eindruck, dass virtualenv --no-site-packages
dies eine völlig separate und isolierte Python-Umgebung schaffen würde, aber es scheint nicht so.
Zum Beispiel habe ich Python-Django global installiert, möchte aber eine virtuelle Umgebung mit einer anderen Django-Version erstellen.
$ virtualenv --no-site-packages foo
New python executable in foo/bin/python
Installing setuptools............done.
$ pip -E foo install Django
Requirement already satisfied: Django in /usr/share/pyshared
Installing collected packages: Django
Successfully installed Django
Soweit ich das beurteilen kann, soll das pip -E foo install
oben Gesagte eine neue Version von Django neu installieren. Wenn ich pip anweise, die Umgebung einzufrieren, bekomme ich auch eine ganze Reihe von Paketen. Ich würde erwarten, dass für eine frische Umgebung damit --no-site-packages
dies leer wäre?
$ pip -E foo freeze
4Suite-XML==1.0.2
BeautifulSoup==3.1.0.1
Brlapi==0.5.3
BzrTools==1.17.0
Django==1.1
... and so on ...
Verstehe ich falsch, wie --no-site-packages
es funktionieren soll?
python
virtualenv
pip
ianw
quelle
quelle
--no-site-packages
ist DEPRECATED. Wird nur aus Gründen der Abwärtskompatibilität beibehalten. Der fehlende Zugriff auf globale Site-Pakete ist jetzt das Standardverhalten . Wenn Sie auf globale Site-Pakete zugreifen möchten, können Sie diese aktivieren--system-site-packages
.Antworten:
Ich hatte ein solches Problem, bis mir klar wurde, dass ich (lange bevor ich virtualenv entdeckt hatte) dem PYTHONPATH in meiner .bashrc-Datei Verzeichnisse hinzugefügt hatte. Da es über ein Jahr zuvor gewesen war, habe ich nicht sofort daran gedacht.
quelle
--no-site-packages
zur Arbeit komme . Ich bin kurz davor, Ubuntu abzuwischen und zu sehen, ob das die Dinge behebt. Ich dachte anfangs, dass ich das gleiche PYTHONPATH-Problem habe, aber beim Laufenprintenv
kann ich es nicht sehen. Die Frustration nimmt zu und jede Hilfe wird sehr geschätzt. Mein sys.path aus einem mit erstellten venv--no-site-packages
scheint alle meine Paketverzeichnisse zu enthalten. Ich habe nicht die geringste Ahnung, wie ich das ändern kann. Hilfe?PATH
Variable gelten, wenn Sie ausführbare Dateien auch außerhalb der virtuellen Umgebung finden.Sie müssen sicherstellen, dass Sie die
pip
Binärdatei in der von Ihnen erstellten virtuellen Umgebung ausführen, nicht in der globalen.Sehen Sie einen Test:
Wir erstellen die virtuelle Umgebung mit der
--no-site-packages
Option:Wir überprüfen die Ausgabe
freeze
der neu erstelltenpip
:Aber wenn wir das Globale verwenden
pip
, bekommen wir Folgendes:Das heißt, alle Pakete,
pip
die im gesamten System installiert wurden. Durch Überprüfen erhaltenwhich pip
wir (zumindest in meinem Fall) so etwas wie/usr/local/bin/pip
, was bedeutet, dass wenn wir dies tunpip freeze
, diese Binärdatei anstelle von aufgerufen wirdmytest/bin/pip
.quelle
pip
für einen bestimmten Pfad zum globalen Pip, der beim Aktivieren der virtuellen Umgebung nicht überschrieben wurde.Schließlich stellte ich fest, dass pip-E aus irgendeinem Grund nicht funktionierte. Wenn ich jedoch die virtuelle Umgebung tatsächlich aktiviere und easy_install von virtualenv verwende, um pip zu installieren, dann verwende pip direkt von innen, es scheint wie erwartet zu funktionieren und zeigt nur die Pakete in der virtuellen Umgebung an
quelle
Ich weiß, dass dies eine sehr alte Frage ist, aber für diejenigen, die hier ankommen und nach einer Lösung suchen:
Vergessen Sie nicht, virtualenv (
source bin/activate
) vor dem Ausführen zu aktivierenpip freeze
. Andernfalls erhalten Sie eine Liste aller globalen Pakete.quelle
Löschen Sie vorübergehend das
PYTHONPATH
mit:Erstellen und aktivieren Sie dann die virtuelle Umgebung:
Nur dann:
quelle
--no-site-packages
sollte, wie der Name schon sagt, das Standardverzeichnis für Site-Pakete aus entfernensys.path
. Alles andere, was im Standard-Python-Pfad lebt, bleibt dort.quelle
PYTHONPATH
mitexport PYTHONPATH=
dem Trick zu tun.Ein ähnliches Problem kann unter Windows auftreten, wenn Sie Skripte direkt aufrufen,
script.py
die dann den Windows-Standardöffner verwenden und Python außerhalb der virtuellen Umgebung öffnen. Wenn Sie es mit aufrufen,python script.py
wird Python in der virtuellen Umgebung verwendet.quelle
Dies scheint auch zu passieren, wenn Sie das Verzeichnis virtualenv in ein anderes Verzeichnis (unter Linux) verschieben oder ein übergeordnetes Verzeichnis umbenennen.
quelle
Ich hatte das gleiche Problem. Das Problem für mich (unter Ubuntu) war, dass mein Pfadname enthalten war
$
. Als ich eine virtuelle Umgebung außerhalb von $ dir erstellt habe, hat es gut funktioniert.Seltsam.
quelle
Einer der möglichen Gründe, warum virtualenv pip nicht funktioniert, besteht darin, dass in einem der übergeordneten Ordner Speicherplatz in seinem Namen vorhanden war
/Documents/project name/app
, um/Documents/projectName/app
das Problem zu lösen.quelle
Ich bin auf das gleiche Problem gestoßen, bei dem pip in venv immer noch als global pip funktioniert.
Nachdem ich viele Seiten durchsucht habe, finde ich es auf diese Weise heraus.
1. Erstellen Sie ein neues venv von virtualenv mit der Option "--no-site-packages".
Bitte beachten Sie, dass die Option "--no-site-packages" seit 1.7.0 in der Dokumentdatei von virtualenv standardmäßig true war, aber ich fand, dass sie nur funktioniert, wenn Sie sie manuell aktivieren. Um ein reines Venv zu erhalten, empfehle ich dringend, diese Option auf 2 zu setzen. Aktivieren Sie die neue Umgebung, die Sie erstellt haben
Wünschte, diese Antwort hilft Ihnen!
quelle
Hier ist die Liste aller pip installieren Optionen - ich keine ‚gefunden
-E
‘ Option sein kann ältere Version hatte. Im Folgenden teile ich eine einfache englische Verwendung und Arbeitvirtualenv
für die kommenden SO-Benutzer.Alles scheint in Ordnung zu sein, akzeptiere das Aktivieren von
virtualenv
(foo
). Alles, was es tut, ist, dass wir mehrere (und unterschiedliche) Python-Umgebungen haben, dh verschiedene Python-Versionen oder verschiedene Django-Versionen oder jedes andere Python-Paket - falls wir eine frühere Version in der Produktion haben und die neueste Django-Version mit unserer testen möchten Anwendung.Kurz gesagt, das Erstellen und Verwenden (Aktivieren) der virtuellen Umgebung (
virtualenv
) ermöglicht das Ausführen oder Testen unserer Anwendung oder einfacher Python-Skripte mit verschiedenen Python-Interpretern, dh Python 2.7 und 3.3 - kann eine Neuinstallation (mit--no-site-packages
Option) oder alle vorhandenen Pakete sein / letztes Setup (mit--system-site-packages
Option). Um es zu benutzen, müssen wir es aktivieren:$ pip install django
wird es in den globalen Site-Paketen installieren, und in ähnlicher Weisepip freeze
werden die Namen der globalen Site-Pakete abgerufen.Während der Ausführung im venv dir (foo)
$ source /bin/activate
wird venv aktiviert, dh jetzt wird alles, was mit pip installiert wurde, nur in der virtuellen Umgebung installiert, und erst jetzt gibt das Einfrieren von pip nicht die Liste der Python-Pakete globaler Site-Pakete an. Einmal aktiviert:(foo)
bevor das$
Zeichen anzeigt, dass wir eine virtuelle Python-Umgebung verwenden, dh alles, was mit pip - install, freeze, deinstalliert wird, ist auf dieses venv beschränkt und hat keine Auswirkungen auf die globale / standardmäßige Python-Installation / Pakete.quelle