Umgebungsvariable PYTHONPATH

19

Ich habe das in meinem ~/.profile:

export PYTHONPATH=/home/dev/python-files

Im python-filesVerzeichnis habe ich ein paar Projekte aus git-hub (flask, curveship und py-vgdl) geklont.

Immer wenn ich versuche, eines der Beispiele in diesen Projekten zu starten, erhalte ich eine Fehlermeldung, die der folgenden ähnelt:

$ python ~/python-files/py-vgdl/examples/gridphysics/frogs.py 
Traceback (most recent call last):
    File "/home/dev/python-files/py-vgdl/examples/gridphysics/frogs.py", line 67, in <module>
        from vgdl.core import VGDLParser
ImportError: No module named vgdl.core

Es scheint mir, dass ich diesen Fehler nicht bekommen sollte, weil ich diese PYTHONPATHUmgebungsvariable eingerichtet habe?

Ausführen des interaktiven Python-Interpreters:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'
Jerome
quelle

Antworten:

35

Versuchen Sie, an PYTHONPATH anzuhängen, anstatt es vollständig zu überschreiben.

export PYTHONPATH=$PYTHONPATH:/home/dev/python-files

Verweise:

Laut der Python-Dokumentation zu PYTHONPATH

Erweitern Sie den Standardsuchpfad für Moduldateien. [...]

Der Standardsuchpfad ist installationsabhängig, beginnt jedoch im Allgemeinen mit prefix/lib/pythonversion(siehe PYTHONHOMEoben). Es wird immer angehängt PYTHONPATH.

Dies bedeutet, dass einige Werte in vorhanden sind PYTHONPATHund der Standardsuchpfad ebenfalls nur angehängt wird.

Außerdem wird in diesem Blogeintrag ( Link zu Archive.org ) klar erläutert, warum Sie ihn anhängen PYTHONPATHund nicht überschreiben müssen. Scrollen Sie zum Abschnitt - Sonderfälle und untersuchen Sie den Suchpfad , um eine klare Erklärung zu erhalten (leider keine relative URL zu diesem Link, sodass Sie scrollen müssen). Obwohl der Benutzer die Beispiele auf einem Mac ausgibt, sind sie für jede Plattform sehr relevant

Nitin Venkatesh
quelle
1
@ Garrett Danke :) Aktualisiert mit Archive.org Link.
Nitin Venkatesh,
+1 für die Archiv / Stereoplex-Verbindung. Es beantwortet so viele Fragen, wie es auf der Titelseite der offiziellen Python-Dokumentation stehen sollte!
Malik A. Rumi
5

Sie können auch wie folgt vorgehen:

export PYTHONPATH=$(pwd) **or** export PYTHONPATH=${PWD}

pwd ist das aktuelle Arbeitsverzeichnis.

Mrudhvika Damaraju
quelle
Achtung, dies überschreibt Ihren PYTHONPATH! Wenn Sie pwd zu Ihrem PYTHONPATH hinzufügen möchten:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111
4

PYTHONPATHsollte zeigen, wo sich Ihre Python-Pakete und -Module befinden, nicht wo sich Ihre Kassen befinden. Mit anderen Worten, wenn Sie dies tun ls "$PYTHONPATH", sollten Sie *.pyDateien ( Python-Module ) und Verzeichnisse mit __init__.pyDateien ( Python-Pakete ) sehen.

Wenn Sie also in der Lage sein möchten, sollten import vgdlSie PYTHONPATHso aussehen:

PYTHONPATH=/home/dev/python-files/py-vgdl

denn das vgdl paket ist drinnen py-vgdl, nicht drinnen python-files.

Um auch die anderen Pfade hinzuzufügen, können Sie sie wie folgt :trennen:

PYTHONPATH="/home/dev/python-files/py-vgdl:/home/dev/python-files/something:$PYTHONPATH"

Dies wird in der Tat funktionieren, für solche Fälle kann die Verwendung PYTHONPATHjedoch zu komplex sein. Was ich empfehle, ist zu verwenden virtualenv, das absichtlich gemacht wird, um Situationen wie Ihre zu vereinfachen. Was Sie tun müssen, ist im Grunde:

  1. Erstellen Sie eine Umgebung: virtualenv env
  2. Aktiviere es: source env/bin/activate
  3. Installieren Sie Ihre Pakete: Dies kann entweder mit pipoder über das setup.pySkript Ihrer Pakete erfolgen.
  4. Genießen.

Ich gebe nicht viele Informationen, da virtualenv gut dokumentiert ist. Wenn Sie Hilfe bei etwas benötigen, sollten Sie eine neue Frage öffnen.

Andrea Corbellini
quelle