python import Fehler
was ist Los mit meinem Importe?
App Ordner-Struktur:
myapp/
- models/models.py enthält
SpotModel()
- tests/tests.py enthält TestSpotModel(unittest.TestCase). tests.py Importe
from myapp.models.models import *
die funktioniert wie ein Charme - scripts/import.py enthält
from myapp.models.models import *
das problem ist, dass import.py bei der Ausführung zu einem Fehler führt:
ImportError: No module named myapp.models.models
aber tests.py läuft.
Habe ich __init__.py
Dateien in myapp/__init__.py
, myapp/models/__init__.py
, myapp/tests/__init__.py
und wie bereits erwähnt, laufen die unit-tests mit nosetests funktioniert wie vorgesehen.
from foo import *
wird dringend abgeraten, weil es bewirkt, dass Namensraum-Kollisionen. Es ist schwer zu sagen, was passiert mit dieser Aussage anwesend.Ich würde auch versuchen zu vermeiden, benennen Sie ein Modul mit einem Python-Schlüsselwort wie
import
. Jetzt können Sie nicht import myapp.import
!Umbenannt habe ich es zu python myapp/scripts/data.py aber es ist immer noch das gleiche problem
In den Paketen, die
import *
ist viel weniger ein problem, wenn man weiß, was Sie tun, und auch allgegenwärtig.T: sexuell übertragbare Krankheiten sind allgegenwärtig, es bedeutet nicht, Sie brauchen einen Anwalt. Und in diesem Fall wusste man nicht weiß, was man tut.
InformationsquelleAutor kristian nissen | 2010-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es
__init__.py
nichtinit.py
. Stellen Sie sicher, dass jeder der Verzeichnis-Hierarchie enthält, um importieren zu können.EDIT: habe ich es geschafft ihn zu reproduzieren.
Hier ist die Verzeichnis-Struktur:
Lege ich den folgenden code am Anfang der
data.py
um das problem einzugrenzen:Läuft die
data.py
dem Weg OP angegeben yeilds ImportError:Aber auf diese Weise funktioniert wie ein Charme:
Beachten Sie den Unterschied in den ersten Eintrag von
sys.path
.Er schrieb
__init__.py
, aber zunächst ohne backticks, also markdown dachte, es sollte zeigen Sie es Fett.Benötige ich ein init.py innerhalb des scripts-Ordner? Ich habe versucht, das hinzufügen es, aber es ist immer noch der gleiche Fehler
InformationsquelleAutor Ihor Kaharlichenko
Wie sind Sie mit der Ausführung
import.py
? Was ist das aktuelle Arbeitsverzeichnis, wenn Sie so tun?Den
myapp
Verzeichnis muss auf der Python - Pfad (ie. in eines der Verzeichnisse, die insys.path
) für Sie sein, um in der Lage zuimport
. Python fügt automatisch das aktuelle Arbeitsverzeichnis auf den Pfad der Liste beim interpreter-Start-Zeit.Also, wenn das Verzeichnis, das enthält
myapp
wird nicht Hinzugefügt, um den Pfad manuell (zB. mit derPYTHONPATH
- Umgebungsvariable, oder indem es aufsys.path
imsitecustomize.py
), müssen Sie in das Verzeichnis mitmyapp
wenn Sie das Skript ausführen. Wenn Sie innerhalb dermyapp
Verzeichnis selbst, Sie werden nicht in der Lage zu importieren, diemyapp
Paket.InformationsquelleAutor bobince
Ihre
sys.path
ist eindeutig nicht das gleiche, wenn Sie die test und wenn Sie das Skript ausführen. Tunam oberen Rand der beiden Module zu bestätigen. Dann befestigen Sie die eine, die falsch ist (durch das Anhängen
sys.path
übergeordneten Verzeichnismyapp
in dem Fall, wo es fehlt.InformationsquelleAutor Alex Martelli
Es sei denn, Sie haben vergessen, es zu erwähnen, haben Sie sich nicht
__init__.py
immyapp/scripts
, somyapp/scripts/import.py
ist nicht ein Modul vonmyapp
.Sofern
myapp
ist in deinen globalen path irgendwie, kann das script nicht finden, weil es nicht suchen, es in der richtigen Stelle.Entweder machen Sie Ihren Ordner "scripts" ein Modul durch Zugabe von ein
__init__.py
zu bewegen, die Skripts der Dateisystem-Hierarchie - (entweder inmyapp
oder in dessen übergeordneten Ordner) oder installierenmyapp
in Ihrem Pfad (d.h. verschieben Sie es auf Ihrempackages
Ordner, z.B./usr/lib/python2.6/dist-packages/
).InformationsquelleAutor Alan Plum