Wie legen Sie Ihren Pythonpfad in einer bereits erstellten virtuellen Umgebung fest?


106

Welche Datei bearbeite ich und wie? Ich habe eine virtuelle Umgebung erstellt.


Überprüfen Sie, ob es auf die richtigen Verzeichnisse verweist. Wenn Sie noch keine haben, klicken Sie auf die Schaltfläche Neu und erstellen Sie sie.

11
Verwenden Sie den Befehl add2virtualenv .
29.

5
add2virtualenv ist ein virtualenvwrapperBefehl. Es ist nicht Teil von virtualenv.
Kojiro

Antworten:


124

EDIT # 2

Die richtige Antwort ist @ arogachevs .


Wenn Sie die PYTHONPATHin einer virtuellen Umgebung verwendete bin/activateDatei ändern möchten, können Sie der Datei Ihrer virtuellen Umgebung die folgende Zeile hinzufügen :

export PYTHONPATH="/the/path/you/want"

Auf diese Weise wird das neue PYTHONPATHjedes Mal festgelegt, wenn Sie diese virtuelle Umgebung verwenden.

EDIT: (um @ RamRachums Kommentar zu beantworten)

Um den ursprünglichen Wert wiederherzustellen deactivate, können Sie hinzufügen

export OLD_PYTHONPATH="$PYTHONPATH"

und fügen Sie Ihrem bin/postdeactivateSkript die folgende Zeile hinzu .

export PYTHONPATH="$OLD_PYTHONPATH"

1
Wird es auch entfernt deactivate?
Ram Rachum

1
Dies bedeutet also, dass eine neu erstellte virtuelle Umgebung die Standardeinstellung PYTHONPATH(die globale) anstelle des lokalen Pfads virtualenv hat?
Ducin

6
Das hat bei mir sehr gut funktioniert, ich benutze keinen virtualenvwrapper. Der einzige Hinweis ist, dass ich kein solches bin / postdeactivate-Skript hatte, sondern dass eine Aktivierung eine Deaktivierungsfunktion hatte. Die Codezeile sollte daher dort platziert werden, wobei darauf zu achten ist, dass sie wie die übrigen Operationen in der Funktion in eine if-Anweisung eingeschlossen wird.
Niccolò

2
Es scheint seltsam, dass virtualenv dies nicht standardmäßig tut.
Seth

2
Edit # 2 ist eine Lüge! :) Die richtige Antwort ist @ arjen-p-de-vries's eine
Berriel

73

Der Kommentar von @ s29 sollte eine Antwort sein:

Eine Möglichkeit, der virtuellen Umgebung ein Verzeichnis hinzuzufügen, besteht darin, virtualenvwrapper zu installieren (was für viele Dinge nützlich ist) und dann zu tun

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

Wenn Sie diesen Pfad entfernen möchten, bearbeiten Sie die Datei myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

Die Dokumentation zu virtualenvwrapper finden Sie unter http://virtualenvwrapper.readthedocs.org/en/latest/

Eine spezifische Dokumentation zu dieser Funktion finden Sie unter http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv


6
zu entfernen:add2virtualenv -d
thecheech

1
habe gerade diese Antwort in meiner verlinkt, da es weitaus besser ist
mdeous

27

Sie können eine .pthDatei erstellen , die das zu suchende Verzeichnis enthält, und es im site-packagesVerzeichnis ablegen. Z.B:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

Der Effekt ist der gleiche wie beim Hinzufügen /some/library/pathzu sys.pathund bleibt lokal im virtualenvSetup.


7
Ich mag diesen Ansatz wirklich; Nicht annähernd so unbeständig wie das Hinzufügen von Zeilen zum Aktivieren / Deaktivieren und erfordert keine Verwendung von virtualenvwrapper. Wenn Sie Python lieber nicht aufrufen möchten, um das Verzeichnis der Site-Pakete zu finden, befindet es sich auf dem ziemlich vorhersehbaren Pfad $VIRTUALENV_ROOT/lib/pythonX.Y/site-packages. Dokumente zu .pth-Dateien: docs.python.org/3.6/library/site.html
Alec

2
Ich wollte keinen absoluten Pfad eingeben, da sich meine Arbeitsbereiche in meinem Dateisystem bewegen. Und mein Projektpfad hat Leerzeichen. Also habe ich den leicht modifizierten Befehl eingegeben: pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popdDann habe ich meine virtuelle Umgebung deaktiviert und reaktiviert. Ich konnte jetzt Projektcode ausführen, bei dem ich wissen musste, wo sich mein Projektverzeichnis befand.
Jim DeLaHunt

4
Dies ist die richtige Antwort. Das Ändern des vom Hersteller bereitgestellten Skripts ( /bin/activate) ist ein Fehlverhalten, und die Installation von Tools von Drittanbietern ist schlechter als die Verwendung einer integrierten Methode, um dies zu erreichen.
Red

2
  1. Initialisieren Sie Ihre virtuelle Umgebung
cd venv

source bin/activate
  1. Legen Sie einfach Ihren Python-Pfad fest oder ändern Sie ihn, indem Sie den folgenden Befehl eingeben:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. Geben Sie zur Überprüfung des Python-Pfads in Python Folgendes ein:
   python

      \>\> import sys

      \>\> sys.path

1

Ich habe mein Aktivierungsskript so geändert .virtualenvrc, dass es die Datei als Quelle enthält , sofern sie im aktuellen Verzeichnis vorhanden ist, und PYTHONPATHbeim Aktivieren / Deaktivieren gespeichert / wiederhergestellt wird.

Das gepatchte activateSkript finden Sie hier.. Es ist ein Drop-In-Ersatz für das von virtualenv 1.11.6 erstellte Aktivierungsskript.

Dann habe ich so etwas zu meinem hinzugefügt .virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"

-20

Hier wird es bereits beantwortet -> Verursacht meine virtuelle Umgebung (Python), dass mein PYTHONPATH kaputt geht?

UNIX / LINUX

Fügen Sie "export PYTHONPATH = / usr / local / lib / python2.0" in die Datei ~ / .bashrc ein und geben Sie "source ~ / .bashrc" OR ". ~ / .Bashrc" ein.

WINDOWS XP

1) Gehen Sie zur Systemsteuerung. 2) Doppelklicken Sie auf System. 3) Gehen Sie zur Registerkarte Erweitert. 4) Klicken Sie auf Umgebungsvariablen

Überprüfen Sie im Fenster Systemvariablen, ob Sie eine Variable mit dem Namen PYTHONPATH haben. Wenn Sie bereits eines haben, überprüfen Sie, ob es auf die richtigen Verzeichnisse verweist. Wenn Sie noch keine haben, klicken Sie auf die Schaltfläche Neu und erstellen Sie sie.

PYTHON-CODE

Alternativ können Sie auch unter Ihrem Code Folgendes tun: -

import sys
sys.path.append("/home/me/mypy") 

4
-1: Hiermit wird der PYTHONPATH des Benutzers angesprochen, nicht der PYTHONPATH des virtuellen Benutzers.
Twneale
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.