Sys.path () und PYTHONPATH Fragen

Ich habe Python gelernt, ich arbeite in 2.7.3, und ich versuche, import Anweisungen zu verstehen.

  1. Die Dokumentation sagt, dass, wenn Sie versuchen, ein Modul zu importieren, der Dolmetscher zuerst nach einem der eingebauten Module suchen wird.

    Was versteht man unter einem eingebauten Modul?

  2. Dann sagt die Dokumentation, dass der Interpreter in den von sys.path aufgelisteten Verzeichnissen sucht und dass sys.path aus diesen Quellen initialisiert wird:

    • Das Verzeichnis mit dem Eingabeskript (oder dem aktuellen Verzeichnis).
    • PYTHONPATH (eine Liste von Verzeichnisnamen mit derselben Syntax wie die Shell-Variable PATH ).
    • Die installationsabhängige Vorgabe.

    Hier ist eine Sample-Ausgabe eines sys.path-Befehls von meinem Computer mit Python im Kommandozeilen-Modus: (Ich löschte ein paar, damit es nicht riesig wäre)

     ['', '/usr/lib/python2.7', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol'] 

    Nun, ich gehe davon aus, dass der '' Pfad auf das Verzeichnis mit dem 'Skript' verweist, und so dachte ich, dass der Rest von ihnen aus meiner PYTHONPATH Umgebungsvariable kommen würde. Allerdings, wenn ich zum Terminal gehe und Typ env , PYTHONPATH existiert nicht als Umgebungsvariable. Ich habe auch versucht, import os dann os.environ , aber ich bekomme die gleiche Ausgabe.

    Habe ich wirklich keine PYTHONPATH Umgebungsvariable? Ich glaube nicht, dass ich jemals speziell eine PYTHONPATH Umgebungsvariable definiert habe, aber ich nahm an, dass, als ich neue Pakete installierte, diese Umgebungsvariable automatisch änderte. Wenn ich keinen PYTHONPATH habe, wie wird mein sys.path bevölkert? Wenn ich neue Pakete herunterlade, wie weiß Python, wo man sie suchen kann, wenn ich diese PYTHONPATH-Variable nicht habe?

  3. Wie funktionieren Umgebungsvariablen? Von dem, was ich verstehe, sind Umgebungsvariablen spezifisch für den Prozess, für den sie gesetzt sind, aber wenn ich mehrere Terminalfenster öffne und env betreibe, zeigen sie alle eine Anzahl identischer Variablen, z. B. PATH . Ich kenne dort Dateistellen für persistente Umgebungsvariablen, zB /etc/environment , die meine PATH Variable enthält. Ist es möglich zu sagen, wo eine persistente Umgebungsvariable gespeichert ist? Was ist der empfohlene Ort für die Speicherung neuer persistenter Umgebungsvariablen? Wie funktionieren Umgebungsvariablen eigentlich mit dem Python-Interpreter? Der Python-Interpreter sucht nach PYTHONPATH , aber wie funktioniert es auf der nitty-gritty Ebene?

3 Solutions collect form web for “Sys.path () und PYTHONPATH Fragen”

So viele Fragen in einem gehen! 🙂

Nun, ich versuche nur einige von ihnen zu beantworten.

1) ein eingebautes Modul ist ein beliebiges Modul, das mit einer Python-Version kommt. Zum Beispiel sind die sys und os Module eingebaute Module. Das ist es wirklich

2) Die Variable PYTHONPATH existiert standardmäßig nicht auf Ihrem System. Wenn du den Python-Interpreter startest, füllt es das Array von Pfad, wo es nach Modulen sucht, wie du es beschrieben hast. Dies ist das Ergebnis von sys.path. Allerdings ist sys.path nicht die Umgebungsvariable PYTHONPATH. Wenn du den PYTHONPATH in deinem System einsetzst, wird der gesamte darin enthaltene Pfad in das Array aufgenommen, das der Python-Interpreter für die Suche nach Modulen verwendet.

Ich werde die Antwort auf die Umgebungsvariablen für andere überlassen, da ich nicht das Gefühl habe, dass ich die richtige Person bin, um eine solche Frage zu beantworten. Mein Gefühl aber ist, dass es sich von System zu System ändern könnte. Sowieso…

Ich hoffe es hilft.

  1. Eingebaute Module sind die unter sys.builtin_module_names aufgelisteten sys.builtin_module_names . Diese Module werden zusammen mit dem Dolmetscher zusammengestellt und sind daher immer verfügbar. Beachten Sie, dass sie Teil der Standardbibliothek sind, aber die Standardbibliothek enthält viele weitere Module. Um den Unterschied klar zu machen, wenn du diesen Code in python3.3 ausführen willst:

     >>> import sys >>> sys.path = [] >>> import os # works >>> import traceback # ImportError, traceback is in the stdlib! 

    Auf python2 gelingen beide, weil die import special-cases der standard-bibliothek pfad (Siehe hierzu weitere Informationen zu den Änderungen zum import in python3.3).

  2. Wenn das PYTHONPATH nicht gefunden wird, enthält es kein zusätzliches Verzeichnis. Doch die Dokumentation, die Sie verknüpfen, gibt auch an, dass python eine "installationsabhängige Vorgabe" verwendet. Die Verzeichnisse, die Sie in Ihrem sys.path werden in diesem "Installations-depedent default" definiert. Wenn du das PYTHONPATH definierst, PYTHONPATH du dem PYTHONPATH noch andere Verzeichnisse sys.path bevor sys.path das Standard einsetzt, aber kein Schaden, ohne es zu definieren.

  3. Umgebungsvariablen werden pro Prozeß definiert, aber Shells können ihren eigenen "Geltungsbereich" von Variablen den Unterprozessen, die sie starten, zur Verfügung stellen. Beispielsweise können Sie Umgebungsvariablen in den Shell-Dateien wie ~/.bashrc oder ~/.profile ~/.bashrc .

    Wenn Sie auf Ubuntu sind, ist die bevorzugte Art, eine systemweite und persisten Umgebungsvariable zu definieren, mit dem pam_enviroment . Sie können diese Frage auf Ask Ubuntu sehen, die zeigt, wie Sie eine systemweite Umgebungsvariable einstellen können.

    AFAIK gibt es keine Standardmethode, um sie für jede (zB) linux distro einzustellen, und offensichtlich hat jedes Betriebssystem seine eigene Methode, sie zu definieren.

    Wenn Sie eine ausführlichere Erklärung über Umgebungsvariablen behandeln möchten, sollten Sie wahrscheinlich auf Super User fragen.

PYTHONPATH ist nicht auf Ihrem System definiert. Das heißt, alles, was Sie sehen, in sys.path außer für '' ist 'die Installation-abhängigen Standard.

Umgebungsvariablen charakterisieren die Umwelt, kein Prozess. Allerdings können Sie sie beim Anfahren eines Prozesses anpassen, indem Sie, sagen wir, Linux- env Befehl verwenden. Das bedeutet im Grunde, dass der Prozess in einer anderen Umgebung läuft. Die "Wie, wenn funktioniert" Teil Ihrer Frage können plattformabhängige Antworten haben. Allerdings denke ich nicht, dass Sie "sagen können, wo eine persistente Umgebungsvariable gespeichert ist", wenn Sie eine Datei bedeuten. Umgebungsvariablen können in irgendwelchen der Dateien eingestellt werden, die irgendwann ausgeführt werden (normalerweise beim Start) oder einfach in der Befehlszeile.

  • Anaconda - Pfad Umgebungsvariable in Fenstern
  • Im Python-Skript, wie setze ich PYTHONPATH?
  • Python: Exportieren von Umgebungsvariablen in subprocess.Popen (..)
  • Python ist die beste Programmiersprache der Welt.