Ich habe eine Datei mit der Bezeichnung tester.py
, unter /project
.Importieren Sie eine Datei aus einem Unterverzeichnis?
/project
hat ein Unterverzeichnis lib
, mit einer Datei BoxTime.py
genannt genannt:
/project/tester.py
/project/lib/BoxTime.py
Ich möchte BoxTime
von tester
importieren. Ich habe dies versucht:
import lib.BoxTime
Welche Folge:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
Irgendwelche Ideen, wie BoxTime
aus dem Unterverzeichnis zu importieren?
EDIT
Die __init__.py
war das Problem, aber vergessen Sie nicht, BoxTime
als lib.BoxTime
oder Verwendung zu beziehen:
import lib.BoxTime as BT
...
BT.bt_function()
Warum fühlt sich es * Hacky *? So markiert Python sichere/verfügbare Importverzeichnisse. – IAbstract
Es markiert nicht nur sichere/verfügbare Importverzeichnisse, sondern bietet auch die Möglichkeit, beim Import eines Verzeichnisnamens einen Initialisierungscode auszuführen. – Sadjad
Ja, das ist hacky und sogar dreckig, und meiner Meinung nach sollte die Sprache nicht die Möglichkeit bieten, Dateien über das Dateisystem zu laden. In PHP haben wir das Problem gelöst, indem wir den Userland-Code mehrere Autoloading-Funktionen registrieren lassen, die aufgerufen werden, wenn ein Namespace/Klasse fehlt. Dann hat die Community den PSR-4-Standard produziert und Composer implementiert es, und heutzutage muss sich niemand darum kümmern. Und keine doofen hartcodierten '__init__'-Dateien (aber wenn du es willst, registrier einfach einen Autoloading-Haken! Das ist der Unterschied zwischen _hacky_ und _hackable_). –