Die von mir verwendete Version von Python ist 3.6.
Wenn Sie Fehler finden, wäre ich Ihnen dankbar, wenn Sie in den Kommentaren darauf hinweisen könnten.
Angenommen, Sie möchten Ihre eigenen Module unter lib``` aus
`scripts / execute.py``` mit einer solchen Verzeichnisstruktur laden.
.
├──scripts
│ └── execute.py
└──lib
└── my_module.py
Anfangs habe ich versucht, damit umzugehen, indem ich `execute.py``` wie folgt geschrieben und`
sys.path``` eine Datei hinzugefügt habe.
import pandas as pd
import sys
sys.path.append('../lib')
import my_module
# (Folgendes wird weggelassen)
Dies ist jedoch die Python-Codierungskonvention PEP8 ([japanische Übersetzung](https: //pep8-ja.readthedocs). io / ja / latest / #)) wird verletzt. Wenn Sie also flake8 usw. verwenden, wird das folgende Tsukkomi eingegeben.
E402 module level import not at top of file
Zitieren wir den relevanten Teil der japanischen Übersetzung.
Platzieren Sie die Importanweisung immer am Anfang der Datei, unmittelbar nach dem Modulkommentar oder der Dokumentzeichenfolge und vor der globalen Variablen- oder Konstantendefinition des Moduls.
Nur Ich hatte eine Frage zu Stackoverflow mit demselben Effekt.
Dabei wurden mehrere Methoden beantwortet, und die Methode zum Hinzufügen des Verzeichnisses zur Umgebungsvariablen "PYTHONPATH" schien die wesentliche Lösung zu sein. (Der folgende Link wurde eingeführt)
(Obwohl die folgenden Methoden ebenfalls eingeführt wurden, sieht es für mich ehrlich gesagt wie ein listiger Hack aus.)
Auch die japanische Fragenseite teratail hatte Antworten auf ähnliche Fragen. Die Antwort stammt von Herrn Shimizukawa, einem Sphinx-Committer, und scheint daher sehr glaubwürdig zu sein.
Das Anpassen von sys.path im Skript wird nicht empfohlen. Wenn das Verzeichnis, in dem Sie die Bibliothek verwenden möchten, an verschiedenen Stellen festgelegt ist und Sie diese Bibliothek importieren möchten, können Sie die Umgebungsvariable PYTHONPATH festlegen.
Also habe ich das Verzeichnis `lib``` zu PYTHONPATH hinzugefügt und mich damit befasst. Wenn Sie es jedes Mal verwenden, schreiben Sie es in
`bash_profile```.
export PYTHONPATH="${PYTHONPATH}:/vollständiger Pfad des lib-Verzeichnisses/lib"
Dies ermöglichte es uns, die zugehörige Beschreibung von `sys.path``` aus`
execute.py``` zu entfernen.
import pandas as pd
import my_module
# (Folgendes wird weggelassen)
Es ist nicht das Hauptthema, aber ich war gespannt, was passieren würde, wenn der Bibliotheksname und mein eigener Modulname schlagen würden.
Lesen Sie in diesem Fall das offizielle Dokument. Es gibt die folgende Beschreibung im offiziellen Python-Tutorial.
Beim Importieren eines Moduls mit dem Namen Spam sucht der Interpreter zunächst nach einem integrierten Modul mit diesem Namen. Wenn nicht gefunden, suchen Sie in der Liste der Verzeichnisse in sys.path nach einer Datei mit dem Namen spam.py. sys.path wird an folgendem Speicherort initialisiert:
- Das Verzeichnis, das das eingegebene Skript enthält (oder das aktuelle Verzeichnis, wenn keine Datei angegeben ist).
Anscheinend hat der in PYTHONPATH Vorrang. Selbst als ich es tatsächlich versuchte, verhielt es sich so.
Recommended Posts