Ich möchte Unterordner als Module importieren. Daher enthält jeder Unterordner a __init__.py
. Meine Ordnerstruktur sieht folgendermaßen aus:
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
In meinem Hauptskript importiere ich
from dirFoo.foofactory import FooFactory
In dieser Factory-Datei füge ich die Untermodule hinzu:
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2
Wenn ich meine foofactory aufrufe, erhalte ich die Fehlermeldung, dass Python die Submodule foo1 und foo2 nicht importieren kann:
Traceback (most recent call last):
File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module>
from dirFoo1.foo1 import Foo1
ImportError: No module named dirFoo1.foo1
python
import
module
subdirectory
Rasierer
quelle
quelle
__init__.py
zu jedem Unterordner Sie importieren.__init__.py
kann den Job machen.Foo1
im Verzeichnis Eltern war und ein codiertes so etwas wiefrom Foo1 import *
. Gibt es eine Möglichkeit, denselben Effekt zu erzielen, damit Sie nicht alles voranstellen müssenFoo1
?Nur um hier zu benachrichtigen. (von einem Newbee, keviv22)
Benennen Sie die Ordner oder Dateien niemals zu Ihrem eigenen Wohl mit Symbolen wie "-" oder "_". Wenn Sie dies getan haben, können einige Probleme auftreten. Wie bei mir, obwohl Ihr Befehl zum Importieren korrekt ist, können Sie die gewünschten Dateien, die in solchen benannten Ordnern verfügbar sind, nicht erfolgreich importieren.
Ungültige Ordnernamen wie folgt:
gültige Ordnernamen für oben:
Welchen Fehler habe ich gemacht:
Betrachten Sie die Dateistruktur.
Was wollte ich machen
Welchen Befehl habe ich getan?
from Core.Generic-Class-Folder.targetClass import functionExecute
SyntaxError: invalid syntax
Versuchte viele Suchanfragen und sah viele Fragen zum Stapelüberlauf an und konnte nicht entscheiden, was schief gelaufen ist. Ich habe meine Dateien mehrmals überprüft, Dateien verwendet
__init__.py
, den Umgebungspfad eingefügt und mir große Sorgen darüber gemacht, was schief gelaufen ist.Und nach einer langen, langen, langen Zeit habe ich das herausgefunden, als ich mit einem Freund von mir gesprochen habe. Ich bin ein bisschen dumm, solche Namenskonventionen zu verwenden. Ich sollte niemals Leerzeichen oder spezielle Symbole verwenden, um einen Namen für einen Ordner oder eine Datei zu definieren. Das wollte ich also vermitteln. Haben Sie einen guten Tag!
(Entschuldigung für den riesigen Beitrag darüber ... lass einfach meine Frustrationen los ... :) Danke!)
quelle
Legen Sie Ihre Umgebungsvariable PYTHONPATH fest. Zum Beispiel so PYTHONPATH = .: .. (für * nix Familie).
Sie können Ihr aktuelles Verzeichnis (in Ihrem Fall src) auch manuell zu pythonpath hinzufügen:
quelle
Angenommen, Ihr Projekt ist folgendermaßen strukturiert:
Im Inneren
run.py
können Sie die Skripte eins und zwei importieren, indem Sie:Jetzt, noch drinnen
run.py
, können Sie ihre Methoden aufrufen mit:quelle
Erstellen Sie einfach eine leere ___init____.py-Datei und fügen Sie sie im Stammverzeichnis sowie im gesamten Unterverzeichnis / Ordner Ihrer Python-Anwendung hinzu, in dem Sie andere Python-Module haben.
quelle
Hatte Probleme, selbst wenn init .py im Unterordner vorhanden war und alles, was fehlte, war das Hinzufügen von 'as' nach dem Import
quelle