it-swarm.com.de

Hinzufügen eines Verzeichnisses dauerhaft zu PYTHONPATH?

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?

255
John Howard

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.

112
Alex Martelli

Wenn Sie bash (auf einem Mac oder einer GNU/Linux-Distribution) verwenden, fügen Sie dies Ihrem ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/my/other/path"
360
awesomo

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"
74
sth

Dies funktioniert unter Windows

  1. Wechseln Sie unter Windows mit Python 2.7 zum Python-Setup-Ordner.
  2. Lib/Site-Pakete öffnen.
  3. Fügen Sie diesem Ordner eine leere Datei example.pth hinzu.
  4. Fügen Sie der Datei den erforderlichen Pfad hinzu (einen pro Zeile).

Dann können Sie alle Module innerhalb dieser Pfade aus Ihren Skripten sehen.

26
auserdude

Falls noch jemand verwirrt ist - wenn Sie einen Mac verwenden, gehen Sie wie folgt vor:

  1. Terminal öffnen
  2. Typ open .bash_profile
  3. Fügen Sie in der angezeigten Textdatei am Ende diese Zeile hinzu: export PYTHONPATH=$PYTHONPATH:foo/bar
  4. Speichern Sie die Datei, starten Sie das Terminal neu und fertig
19
entrepaul

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.

19
Blue Peppers

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.

11
Pierz

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/
9
Zah

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.

9
Peter Piper

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

6
boyangeor

Um die Antwort von awesomo hinzuzufügen, können Sie diese Zeile auch in Ihren ~/.bash_profile oder ~/.profile einfügen.

5
janex

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
3
testsingh

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.

1
wpmoradi

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.

0
Cloud Cho

Der kürzeste Weg zwischen A - B ist eine gerade Linie.

import sys
if not 'NEW_PATH' in sys.path:
  sys.path += ['NEW_PATH']
0
Al Kari

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))
0

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

0
Rubber Duck