Bei jeder Verwendung sys.path.appendwird 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.appendwird 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 ( .profileoder 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"
              ~/.bashrcdann ausgeführt haben, source ~/.bashrcsiehe stackoverflow.com/questions/2518127/…
                    sudo suam 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 .pthin 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-siteund (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_profileexport PYTHONPATH=$PYTHONPATH:foo/barexportSchlü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 PYTHONPATHUmgebungsvariable auch in einer globalen RC-Datei festlegen , z. B. ~/.profileunter 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.pySkript ( in der Regel in sys.prefix gelegen + lib/python<version>/site-packagessowie 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-packagesum den Suchpfad und auch sucht diese Pfade für <package>.pthDateien 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.pthenthä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_profileDatei geändert habe . Das Ändern der .bashrcDatei 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_profileDatei.
Das Hinzufügen export PYTHONPATH="${PYTHONPATH}:/my/other/path"zu ~ / .bashrc funktioniert möglicherweise nicht, wenn PYTHONPATHes 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 PYTHONPATHund 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_detectionin meine ~/.bashrcDatei ein und source ~/.bashrc sie. Später, als ich "$ PYTHONPATH" wiederholte, gab es mir einen :<PATH_TO_TF>/TensorFlow/models/research/object_detectionVorschlag, 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_detectionden 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 ~/.zshrcund das Dateiverzeichnis in das $PATHund 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