Bei jeder Verwendung sys.path.append
wird das neue Verzeichnis hinzugefügt. Sobald ich Python schließe, wird die Liste jedoch auf die vorherigen (Standard?) Werte zurückgesetzt. Wie füge ich ein Verzeichnis dauerhaft hinzu PYTHONPATH
?
Bei jeder Verwendung sys.path.append
wird das neue Verzeichnis hinzugefügt. Sobald ich Python schließe, wird die Liste jedoch auf die vorherigen (Standard?) Werte zurückgesetzt. Wie füge ich ein Verzeichnis dauerhaft hinzu PYTHONPATH
?
Antworten:
Sie müssen Ihr neues Verzeichnis zur Umgebungsvariablen hinzufügen PYTHONPATH
, die durch einen Doppelpunkt vom vorherigen Inhalt getrennt ist. In jeder Form von Unix können Sie dies in einem Startskript tun, das für die von Ihnen verwendete Shell ( .profile
oder was auch immer, abhängig von Ihrer bevorzugten Shell) geeignet ist, mit einem Befehl, der wiederum von der betreffenden Shell abhängt. Unter Windows können Sie dies zu diesem Zweck über die System-GUI tun.
superuser.com
Möglicherweise ist dies ein besserer Ort, um weitere Fragen zu stellen, dh um weitere Einzelheiten zu erfahren, wenn Sie Einzelheiten zur Anreicherung einer Umgebungsvariablen in der von Ihnen ausgewählten Plattform und Shell benötigen, da dies an sich keine eigentliche Programmierfrage ist.
Wenn Sie bash verwenden (auf einem Mac oder einer GNU / Linux-Distribution), fügen Sie dies Ihrem hinzu ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrc
dann ausgeführt haben, source ~/.bashrc
siehe stackoverflow.com/questions/2518127/…
sudo su
am Anfang Ihrer .bashrc-Datei zu setzen. Dieser Beitrag stimmt mit mir überein. Zumindest auf meinem System ist es nicht einmal notwendig.
Anstatt zu manipulieren PYTHONPATH
, können Sie auch eine Pfadkonfigurationsdatei erstellen . Finden Sie zuerst 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
Erstellen Sie dann .pth
in diesem Verzeichnis eine Datei mit dem Pfad, den Sie hinzufügen möchten (erstellen Sie das Verzeichnis, falls es nicht vorhanden ist).
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"
python -m site --user-site
und (create the directory if it doesn't exist)
Teile waren das, was mir fehlte, um es zum Laufen zu bringen.
somelib.pth
? Wenn nicht, raten Sie mal, warum dies möglicherweise nicht funktioniert?
Dies funktioniert unter Windows
Dann können Sie alle Module in diesen Pfaden 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
export
Schlüssel das, was mir gefehlt hat !!!!, positiv bewertet, vielen Dank!
Sie können den Pfad über Ihre pythonrc-Datei hinzufügen, die unter Linux standardmäßig ~ / .pythonrc ist. dh.
import sys
sys.path.append('/path/to/dir')
Sie können die PYTHONPATH
Umgebungsvariable auch in einer globalen RC-Datei festlegen , z. B. ~/.profile
unter Mac oder Linux, oder über Systemsteuerung -> System -> Registerkarte Erweitert -> Umgebungsvariablen unter Windows.
Um ein bisschen mehr Erklärung zu geben, Python automatisch seine Suchpfade konstruieren (wie erwähnt oben und hier ) mit dem site.py
Skript ( in der Regel in sys.prefix gelegen + lib/python<version>/site-packages
sowie lib/site-python
). Man kann den Wert von sys.prefix erhalten:
python -c 'import sys; print(sys.prefix)'
Das site.py Skript fügt dann eine Reihe von Verzeichnissen, abhängig von der Plattform, wie zum Beispiel /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
um den Suchpfad und auch sucht diese Pfade für <package>.pth
Dateien Config , die bestimmte zusätzliche Suchpfade enthalten. Zum Beispiel verwaltet easy-install seine Sammlung installierter Pakete, die einer systemspezifischen Datei hinzugefügt werden, z. B. unter Ubuntu /usr/local/lib/python2.7/dist-packages/easy-install.pth
. Auf einem typischen System gibt es eine Reihe dieser .pth-Dateien, um die herum einige 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 jedem dieser Verzeichnisse (einschließlich der sitedir wie erwähnt setzen oben ). Dies scheint die Art und Weise zu sein, wie die meisten Pakete zum sys.path hinzugefügt werden, anstatt PYTHONPATH zu verwenden.
Hinweis: Unter OSX wurde von site.py ein spezieller zusätzlicher Suchpfad für 'Framework-Builds' hinzugefügt (scheint jedoch für die normale Verwendung von Python in der Befehlszeile zu funktionieren): /Library/Python/<version>/site-packages
(z. B. für Python2.7 :) /Library/Python/2.7/site-packages/
, in dem Pakete von Drittanbietern verwendet werden sollen installiert werden (siehe README in diesem Verzeichnis). So kann man dort eine Pfadkonfigurationsdatei hinzufügen, die zusätzliche Suchpfade /Library/Python/2.7/site-packages/pip-usr-local.pth
enthält, z. B. eine Datei mit dem Namen, die enthält, /usr/local/lib/python2.7/site-packages/
und dann fügt die Systempython diesen Suchpfad hinzu.
Bei mir hat es funktioniert, als ich die .bash_profile
Datei geändert habe . Das Ändern der .bashrc
Datei funktionierte nur, bis ich die Shell neu startete.
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 export PYTHONPATH="${PYTHONPATH}:/my/other/path"
zu ~ / .bashrc funktioniert möglicherweise nicht, wenn PYTHONPATH
es derzeit nicht vorhanden ist (aufgrund von :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Das Hinzufügen des oben genannten zu meinem ~ / .bashrc hat mir unter Ubuntu 16.04 geholfen
echo PYTHONPATH
und nichts ist aufgetaucht! Das bedeutet, dass dieser PYTHONPATH nicht initiiert wurde. Ich füge diese Zeile einfach export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
in meine ~/.bashrc
Datei ein und source ~/.bashrc
sie. Später, als ich "$ PYTHONPATH" wiederholte, gab es mir einen :<PATH_TO_TF>/TensorFlow/models/research/object_detection
Vorschlag, ob ich etwas falsch gemacht habe?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection
, wenn Sie PYTHONPATH zum ersten Mal exportieren, müssen Sie es ohne den ${PYTHONPATH}:
Teil tun
:<PATH_TO_TF>/TensorFlow/models/research/object_detection
den zweiten entfernt export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim
. Irgendwelche Vorschläge dazu, wie man das behebt?
Unter MacOS, anstatt 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 tun:
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 im Terminal ausführen:
source ~/.bashrc
Hoffe das hilft.
Ich habe permanent in Windows Vista Python 3.5 hinzugefügt
System> Systemsteuerung> Erweiterte Systemeinstellungen> Erweitert (tippen Sie auf) Umgebungsvariablen> Systemvariablen> (wenn PYTHONPATH in der Spalte Variable nicht angezeigt wird) (klicken Sie auf) Neu> Variablenname: PYTHONPATH> Variablenwert:
Bitte schreiben Sie das Verzeichnis in den Variablenwert. Es sind Details der Antwort von Blue Peppers.
Das folgende Skript funktioniert auf allen Plattformen, da es sich um reines Python handelt. Es verwendet den Pathlib-Pfad, der hier unter https://docs.python.org/3/library/pathlib.html dokumentiert ist , 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-s-search-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))
Dies ist ein Update für diesen Thread, der einige alte Antworten enthält.
Für diejenigen, die MAC-OS Catalina oder ein neueres (> = 10.15) verwenden, wurde ein neues Terminal mit dem Namen zsh
(ein Ersatz für das alte bash
) eingeführt.
Ich hatte aufgrund dieser Änderung einige Probleme mit den obigen Antworten und habe eine Problemumgehung durchgeführt, indem ich die Datei erstellt ~/.zshrc
und das Dateiverzeichnis in das $PATH
und eingefügt habe$PYTHONPATH
Also habe ich zuerst getan:
nano ~/.zshrc
Beim Öffnen des Editors habe ich folgenden Inhalt eingefügt:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
speicherte es und startete das Terminal neu.
WICHTIG: Der obige Pfad ist auf den Pfad meines Computers eingestellt. Sie müssten ihn an Ihre Python anpassen.
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 dringend, dass Sie virtualenv und virtualenvwrapper verwenden, da Sie sonst Ihren Pfad überladen