Wenn ich sys.path.append
verwende, wird das neue Verzeichnis hinzugefügt. Sobald ich Python schließe, wird die Liste jedoch auf die vorherigen Werte zurückgesetzt. Wie füge ich dauerhaft ein Verzeichnis zu PYTHONPATH
hinzu?
Sie müssen Ihr neues Verzeichnis der Umgebungsvariablen PYTHONPATH
hinzufügen, die durch einen Doppelpunkt vom vorherigen Inhalt davon getrennt ist. In jeder Form von Unix können Sie dies in einem Startskript tun, das für die von Ihnen verwendete Shell geeignet ist (.profile
oder was auch immer, abhängig von Ihrer bevorzugten Shell) mit einem Befehl, der wiederum von der betreffenden Shell abhängt. In Windows können Sie dies zu diesem Zweck über die System-GUI durchführen.
superuser.com
ist möglicherweise ein besserer Ort, um weitere Informationen anzufordern, d. h. nach weiteren Details, wenn Sie Angaben zur Anreicherung einer Umgebungsvariablen in der von Ihnen gewählten Plattform und Shell benötigen, da dies keine eigentliche Programmierfrage ist.
Wenn Sie bash (auf einem Mac oder einer GNU/Linux-Distribution) verwenden, fügen Sie dies Ihrem ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
Anstatt PYTHONPATH
zu bearbeiten, können Sie auch eine path-Konfigurationsdatei erstellen. Finden Sie zunächst heraus, in welchem Verzeichnis Python nach diesen Informationen sucht:
python -m site --user-site
Aus irgendeinem Grund scheint dies in Python 2.7 nicht zu funktionieren. Dort können Sie verwenden:
python -c 'import site; site._script()' --user-site
Dann erstellen Sie in diesem Verzeichnis eine .pth
-Datei mit dem Pfad, den Sie hinzufügen möchten (erstellen Sie das Verzeichnis, falls es nicht existiert).
Zum Beispiel:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
Dies funktioniert unter Windows
Dann können Sie alle Module innerhalb dieser Pfade aus Ihren Skripten sehen.
Falls noch jemand verwirrt ist - wenn Sie einen Mac verwenden, gehen Sie wie folgt vor:
open .bash_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
Sie können den Pfad über Ihre Pythonrc-Datei hinzufügen, die standardmäßig unter ~/.pythonrc unter Linux steht. dh.
import sys
sys.path.append('/path/to/dir')
Sie können die Umgebungsvariable PYTHONPATH
auch in einer globalen RC-Datei festlegen, z. B. ~/.profile
unter Mac oder Linux oder über Systemsteuerung -> System -> Registerkarte Erweitert -> Umgebungsvariablen unter Windows.
Zur weiteren Erläuterung wird Python seine Suchpfade (wie oben und hier ) automatisch mithilfe des site.py
-Skripts (normalerweise in sys.prefix + lib/python<version>/site-packages
sowie lib/site-python
) erstellt. Man kann den Wert von sys.prefix erhalten:
python -c 'import sys; print(sys.prefix)'
Das site.py-Skript fügt dem Suchpfad dann abhängig von der Plattform eine Reihe von Verzeichnissen hinzu, wie /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
. Außerdem durchsucht diese Pfade nach <package>.pth
config-Dateien, die bestimmte zusätzliche Suchpfade enthalten. Zum Beispiel verwaltet easy-install seine Sammlung installierter Pakete, die einer systemspezifischen Datei hinzugefügt werden, z. B. auf Ubuntu /usr/local/lib/python2.7/dist-packages/easy-install.pth
. Auf einem typischen System gibt es eine Reihe dieser .pth-Dateien, um die unerwartete Pfade in sys.path erklärt werden können:
python -c 'import sys; print(sys.path)'
So kann man eine .pth-Datei erstellen und in eines dieser Verzeichnisse einfügen (einschließlich der sitedir wie oben ). Dies scheint die Art zu sein, wie die meisten Pakete dem sys.path hinzugefügt werden, anstatt den PYTHONPATH zu verwenden.
Hinweis: Unter OSX gibt es einen speziellen zusätzlichen Suchpfad, der von site.py für 'Framework Builds' hinzugefügt wurde (scheint jedoch für die normale Verwendung von Python in der Befehlszeile zu funktionieren): /Library/Python/<version>/site-packages
(zB für Python2.7: /Library/Python/2.7/site-packages/
), wo Drittanbieter-Pakete enthalten sind sollen installiert sein (siehe README in diesem Verzeichnis). So kann man dort eine Pfadkonfigurationsdatei hinzufügen, die zusätzliche Suchpfade enthält, z. Erstellen Sie eine Datei mit dem Namen /Library/Python/2.7/site-packages/pip-usr-local.pth
, die /usr/local/lib/python2.7/site-packages/
enthält, und der Systempython fügt diesen Suchpfad hinzu.
Unter Linux können Sie einen symbolischen Link von Ihrem Paket zu einem Verzeichnis des PYTHONPATH erstellen, ohne sich mit den Umgebungsvariablen beschäftigen zu müssen. So etwas wie:
ln -s /your/path /usr/lib/pymodules/python2.7/
Für mich hat es funktioniert, als ich die .bash_profile
-Datei geändert habe. Das Ändern der .bashrc
-Datei funktionierte nur bis zum Neustart der Shell.
Für Python 2.7 sollte es so aussehen:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
am Ende der .bash_profile
-Datei.
Das Hinzufügen von export PYTHONPATH="${PYTHONPATH}:/my/other/path"
zu ~/.bashrc funktioniert möglicherweise nicht, wenn PYTHONPATH
derzeit nicht vorhanden ist (aufgrund des :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Das oben genannte zu meinem ~/.bashrc hinzuzufügen, war für mich auf Ubuntu 16.04 der Trick
Um die Antwort von awesomo hinzuzufügen, können Sie diese Zeile auch in Ihren ~/.bash_profile
oder ~/.profile
einfügen.
Anstatt unter MacOS den Pfad zu einer bestimmten Bibliothek anzugeben. Geben Sie den vollständigen Pfad zum Stammprojektordner in an
~./bash_profile
machte meinen Tag zum Beispiel:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
danach mache:
source ~./bash_profile
Das Hinzufügen eines neuen Pfads zu PYTHONPATH erfolgt manuell durch:
hinzufügen des Pfads zu Ihrem ~/.bashrc-Profil im Terminal durch:
vim ~/.bashrc
fügen Sie Folgendes in Ihr Profil ein
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
stellen Sie dann sicher, dass Sie Ihr bashrc-Profil als Quelle verwenden, wenn Sie Ihren Code in terminal ausführen:
source ~/.bashrc
Hoffe das hilft.
Ich habe dauerhaft in Windows Vista Python 3.5 hinzugefügt
System> Systemsteuerung> Erweiterte Systemeinstellungen> Erweitert (Tippen Sie auf) Umgebungsvariablen> Systemvariablen> (wenn PYTHONPATH in der Variablenspalte nicht angezeigt wird) (klicken Sie auf) Neu> Variablenname: PYTHONPATH> Variablenwert:
Schreiben Sie das Verzeichnis in den Variablenwert. Es sind Details der Antwort von Blue Peppers.
Der kürzeste Weg zwischen A - B ist eine gerade Linie.
import sys
if not 'NEW_PATH' in sys.path:
sys.path += ['NEW_PATH']
Das folgende Skript funktioniert auf allen Plattformen, da es reines Python ist. Es verwendet den Pfad Pfadlib, der hier dokumentiert ist https://docs.python.org/3/library/pathlib.html , damit er plattformübergreifend funktioniert. Sie führen es einmal aus, starten den Kernel neu und fertig. Inspiriert von https://medium.com/@arnaud.bertrand/modifying-python-ssearch-path-with-pth-files-2a41a4143574 .
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
In Python 3.6.4 können Sie sys.path über Python-Sitzungen hinweg wie folgt beibehalten:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
Ich empfehle Ihnen dringend, virtualenv und virtualenvwrapper zu verwenden, da Sie sonst Ihren Pfad durcheinanderbringen