Ein Verzeichnis dauerhaft zu PYTHONPATH hinzufügen?

Lesezeit: 7 Minuten

Benutzer-Avatar
John Howard

Wann immer ich benutze sys.path.append, wird das neue Verzeichnis hinzugefügt. Sobald ich jedoch Python schließe, wird die Liste auf die vorherigen (Standard?) Werte zurückgesetzt. Wie füge ich ein Verzeichnis dauerhaft hinzu PYTHONPATH?

Benutzer-Avatar
ehrfürchtig

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

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

  • Das hat bei mir perfekt funktioniert, aber stellen Sie sicher, dass das Verzeichnis, auf das Sie zeigen, ganz oben steht drin.py-Datei in Ihrer Verzeichnisstruktur. Das war mir zunächst nicht ganz klar. Ich habe es zum Beispiel versucht export PYTHONPATH=$PYTHONPATH:/Users/joey/repos aber es hat nicht funktioniert, weil mein Repos-Verzeichnis kein _ hattedrin_.py. Ein Verzeichnis weiter nach unten: /Users/joey/repos/specificRepo hat es geschafft. Jetzt kann Python jedes nach unten gerichtete Verzeichnis durchlaufen, das mit dem spezifischen Repo-Verzeichnis verbunden ist, das a enthält drin.py !

    – Joey

    14. März 2013 um 14:29 Uhr


  • das hat bei mir funktioniert, aber könnten Sie erklären, wo sich diese PYTHONPATH-Variable befindet? und woher weiß “export PYTHONPATH”, dass es genau diese Datei findet?

    – Apfelliebhaber

    7. Juni 2013 um 17:23 Uhr

  • Denken Sie nach dem Bearbeiten daran ~/.bashrc dann renne source ~/.bashrc siehe stackoverflow.com/questions/2518127/…

    – b_dev

    13. August 2013 um 16:02 Uhr


  • Ich denke, es ist eine schlechte Idee zu setzen sudo su am Anfang Ihrer .bashrc-Datei. Dieser Beitrag stimmt mir zu. Zumindest auf meinem System ist es nicht einmal notwendig.

    – LondonRob

    14. April 2014 um 10:00 Uhr

  • Warum denke ich, dass die Python-Bereitstellung in der Produktion ein Schmerz im Hintern sein könnte?

    – Paul Carlton

    10. März 2019 um 20:57 Uhr

Sie müssen Ihr neues Verzeichnis zur Umgebungsvariable hinzufügen PYTHONPATH, durch einen Doppelpunkt vom vorherigen Inhalt getrennt. 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 tun.

superuser.com Vielleicht ist es ein besserer Ort, um weiter zu fragen, dh nach weiteren Details, wenn Sie Einzelheiten darüber benötigen, wie Sie eine Umgebungsvariable in Ihrer gewählten Plattform und Shell anreichern können, da es sich nicht wirklich um eine Programmierfrage an sich handelt.

  • Errata: Trennzeichen bei Windows wäre ein Semikolon. Wenn Sie Systempfade unter Windows überschreiben müssen, reicht die Einstellung über die GUI als Benutzerumgebungsvariable möglicherweise nicht aus, da Benutzervariablen an Systemvariablen angehängt werden. In diesen Fällen müssen Sie auf ein Startskript zurückgreifen, das die erforderlichen Anpassungen vornimmt.

    – Nathan Ernst

    4. August 2010 um 3:18 Uhr

  • @Nathan, tx für die Erinnerung am Semikolon, aber (wenn Sie natürlich ein Administrator sind) Sie kann einstellen System env.vars unter Windows (außerdem fragt das OP nicht, wie es geht überschreiben der Weg, nur wie anhängen dazu, also ist eine Benutzer-env.var auch dafür geeignet!-).

    – Alex Martelli

    4. August 2010 um 4:16 Uhr

  • auf meinem Arbeits-PC bin ich leider kein Admin, also muss ich zu solchen Maßnahmen greifen. 🙁

    – Nathan Ernst

    4. August 2010 um 22:13 Uhr

  • “In Windows können Sie dies zu diesem Zweck über die System-GUI tun.” -das hat bei mir nicht funktioniert. Ich musste die Lösung von Andrei Deusteanu unten implementieren.

    – Jongleur

    16. August 2020 um 4:05 Uhr

Benutzer-Avatar
etw

Anstatt zu manipulieren PYTHONPATH Sie können auch eine erstellen Pfad Konfigurationsdatei. 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

Erstellen Sie dann eine .pth Datei in diesem Verzeichnis, die den Pfad enthält, 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"

  • Ich habe dies mit Python 2.6 versucht und es scheint bei mir nicht zu funktionieren

    – Lorcan O’Neill

    26. Februar 2013 um 18:02 Uhr

  • Ich habe dieses Verzeichnis einfach mit meinem eigenen Bibliotheksverzeichnis verknüpft und alle meine Skripte dort gespeichert. Hat gut funktioniert.

    – Maifeuer

    5. März 2013 um 6:08 Uhr

  • Entschlossen, es erneut zu versuchen, nachdem ich dieses Thema wieder gefunden hatte, und es geschafft, es diesmal wie oben beschrieben zum Laufen zu bringen! Hochgestimmte und zerknirschte Entschuldigung 🙂

    – Lorcan O’Neill

    7. März 2013 um 11:20 Uhr

  • Das funktioniert einfach perfekt, ich war aber auf dem richtigen Weg python -m site --user-site und (create the directory if it doesn't exist) Teile waren, was mir fehlte, um es zum Laufen zu bringen.

    – Mmmh mmh

    9. März 2013 um 21:33 Uhr


  • Muss ich einen zusätzlichen Schritt machen, damit Python den hinzugefügten Pfad zu erkennt somelib.pth? Wenn nicht, irgendwelche Vermutungen, warum dies möglicherweise nicht funktioniert?

    – Miladious

    4. April 2018 um 7:13 Uhr

Dies funktioniert unter Windows

  1. Wechseln Sie unter Windows mit Python 2.7 zum Python-Setup-Ordner.
  2. Öffnen Sie Lib/site-packages.
  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 Skripts sehen.

Falls jemand immer noch 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 Sie sind fertig

  • Jeder, der sich fragt, wie man den Pfad von Python sieht, verwendet: welche Python

    – Arindam Roychowdhury

    31. Mai 2018 um 16:24 Uhr


  • ziemlich sicher, dass Sie das Terminal auch neu laden müssen

    – Benutzer

    29. September 2018 um 4:04 Uhr

  • eigentlich die export Schlüssel war das, was mir gefehlt hat !!!!, positiv bewertet, vielen Dank!

    – amdev

    27. März 2020 um 20:22 Uhr

Benutzer-Avatar
Blaue Paprika

Sie könnten den Pfad über Ihre pythonrc-Datei hinzufügen, die unter Linux standardmäßig ~/.pythonrc ist. dh.

import sys
sys.path.append('/path/to/dir')

Du könntest auch die einstellen PYTHONPATH Umgebungsvariable, in einer globalen rc-Datei, wie z ~/.profile unter Mac oder Linux oder über Systemsteuerung -> System -> Registerkarte Erweitert -> Umgebungsvariablen unter Windows.

  • Jeder, der sich fragt, wie man den Pfad von Python sieht, verwendet: welche Python

    – Arindam Roychowdhury

    31. Mai 2018 um 16:24 Uhr


  • ziemlich sicher, dass Sie das Terminal auch neu laden müssen

    – Benutzer

    29. September 2018 um 4:04 Uhr

  • eigentlich die export Schlüssel war das, was mir gefehlt hat !!!!, positiv bewertet, vielen Dank!

    – amdev

    27. März 2020 um 20:22 Uhr

Um etwas mehr Erklärung zu geben, erstellt Python automatisch seine Suchpfade (wie oben erwähnt und hier) Verwendung der site.py Skript (normalerweise in sys.prefix + lib/python<version>/site-packages ebenso gut wie 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 hinzu, abhängig von der Plattform, wie z /usr/{lib,share}/python<version>/dist-packages, /usr/local/lib/python<version>/dist-packages zum Suchpfad und auch sucht diese Pfade nach <package>.pth config-Dateien, die bestimmte zusätzliche Suchpfade enthalten. Zum Beispiel Einfach zu installieren verwaltet seine Sammlung von installierten Paketen, die zu 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, die einige unerwartete Pfade in sys.path erklären können:

python -c 'import sys; print(sys.path)'

Man kann also eine .pth-Datei erstellen und in einem dieser Verzeichnisse ablegen (einschließlich des oben erwähnten Sitedir). Dies scheint die Art und Weise zu sein, wie die meisten Pakete zum sys.path hinzugefügt werden, im Gegensatz zur Verwendung von PYTHONPATH.

Hinweis: Unter OSX gibt es einen speziellen zusätzlichen Suchpfad, der von site.py für „Framework-Builds“ hinzugefügt wurde (scheint aber für die normale Verwendung von Python über die Befehlszeile zu funktionieren): /Library/Python/<version>/site-packages (zB für Python2.7: /Library/Python/2.7/site-packages/), wo Pakete von Drittanbietern installiert werden sollen (siehe README in diesem Verzeichnis). So kann man dort eine Pfadkonfigurationsdatei hinzufügen, die zusätzliche Suchpfade enthält, zB eine Datei namens erstellen /Library/Python/2.7/site-packages/pip-usr-local.pth was beinhaltet /usr/local/lib/python2.7/site-packages/ und dann fügt das System Python diesen Suchpfad hinzu.

1103390cookie-checkEin Verzeichnis dauerhaft zu PYTHONPATH hinzufügen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy