Ich habe eine Datei namens tester.py
, die sich auf befindet /project
.
/project
hat ein Unterverzeichnis namens lib
, mit einer Datei namens BoxTime.py
:
/project/tester.py
/project/lib/BoxTime.py
Ich möchte importieren BoxTime
aus tester
. Ich habe das versucht:
import lib.BoxTime
Was ergab:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
Irgendwelche Ideen, wie man BoxTime
aus dem Unterverzeichnis importiert ?
BEARBEITEN
Das __init__.py
war das Problem, aber nicht vergessen , zu beziehen , BoxTime
wie lib.BoxTime
, oder -nutzung:
import lib.BoxTime as BT
...
BT.bt_function()
python
module
subdirectory
python-import
Adam Matan
quelle
quelle
__init__
Dateien (aber wenn Sie es wollen, registrieren Sie einfach einen Autoloading-Hook! Dies ist der Unterschied zwischen hacky und hackbar ).import sys, os; sys.path.insert(0, os.path.abspath('..')); from sibling_package.hacks import HackyHackHack
lib
.lib\__init__.py
.In
lib\BoxTime.py
, schreiben Sie eine Funktionfoo()
wie folgt aus :lib
Schreiben Sie in Ihren Client-Code im obigen Verzeichnis :Führen Sie Ihren Client-Code aus. Sie erhalten:
Viel später - unter Linux würde es so aussehen:
quelle
lib
Sie können versuchen, es einzufügen in
sys.path
:quelle
cd /data
,python ../project/tester.py
. Dann wird es nicht funktionieren.Ich schreibe dies auf, weil jeder zu behaupten scheint, dass Sie ein
lib
Verzeichnis erstellen müssen .Sie müssen Ihr Unterverzeichnis nicht benennen
lib
. Sie können es benennen,anything
sofern Sie es eingeben__init__.py
.Sie können dies tun, indem Sie den folgenden Befehl in eine Linux-Shell eingeben:
Jetzt haben Sie also diese Struktur:
Dann können Sie importieren
mylib
inmain.py
wie folgt aus :Sie können auch Funktionen und Klassen wie folgt importieren:
Auf jede variable Funktion oder Klasse, die Sie darin platzieren,
__init__.py
kann auch zugegriffen werden:Oder so:
quelle
utils\__init__.py
undutils\myfile.py
. (Utils enthalten beide Dateien) So versuche ich zu importierenfrom utils.myfile import myMethod
. Aber ich versteheModuleNotFoundError: No module named 'utils'
. Was könnte falsch sein? PS: Ich benutzeDjango
und versuche zu importieren,views.py
die auf der gleichen Ebene wieutils
Ordner istPYTHONPATH=. python path/to/program.py
Enthält Ihr lib-Verzeichnis eine
__init__.py
Datei?Python verwendet,
__init__.py
um festzustellen, ob ein Verzeichnis ein Modul ist.quelle
Versuchen Sie es
import .lib.BoxTime
. Weitere Informationen zum relativen Import in PEP 328 finden Sie hier .quelle
Ich mache das, was im Grunde alle Fälle abdeckt (stellen Sie sicher, dass Sie sich
__init__.py
in relativ / path / to / your / lib / folder befinden):Beispiel:
Sie haben in Ihrem Projektordner:
Sie haben in einem anderen Projektordner:
Sie möchten die darin enthaltene
/root/anotherproject/utils.py
Funktion foo verwenden und aufrufen.Also schreibst du in app.py:
quelle
os.path
, möchten Sie wahrscheinlichos.path.join((os.path.dirname(os.path.realpath(__file__)),'..','anotherproject')
das '/' in Ihrer Pfadverkettung verwenden, anstatt es fest zu codieren."../anotherproject"
verzichtenos.path.dirname()
?dirname(realpath(__file__))
, berechnet es den Pfad relativ zu Ihrem aktuellen Arbeitsverzeichnis, wenn Sie das Skript ausführen, nicht relativ zu dem Ort, an dem sich das Skript befindet.Erstellen Sie eine leere Datei
__init__.py
im Unterverzeichnis / lib. Und am Anfang des Hauptcodes hinzufügendann
oder besser
quelle
Nur eine Ergänzung zu diesen Antworten.
Wenn Sie alle Dateien aus allen Unterverzeichnissen importieren möchten , können Sie diese zum Stammverzeichnis Ihrer Datei hinzufügen.
Und dann können Sie einfach Dateien aus den Unterverzeichnissen importieren, als ob sich diese Dateien im aktuellen Verzeichnis befinden.
Arbeitsbeispiel
Wenn ich das folgende Verzeichnis mit Unterverzeichnissen in meinem Projekt habe ...
Ich kann den folgenden Code in meine
a.py
Datei einfügenMit anderen Worten, dieser Code abstrahiert, aus welchem Verzeichnis die Datei stammt.
quelle
/project/tester.py
/project/lib/BoxTime.py
Erstellen Sie eine leere Datei
__init__.py
, bis Sie die Datei erreichen/project/lib/somefolder/BoxTime.py
#lib
- braucht hat zwei Elemente eins__init__.py
und ein Verzeichnis namens somefolder#somefolder
hat zwei Elementeboxtime.py
und__init__.py
quelle
Versuche dies:
from lib import BoxTime
quelle