Weil Python die Verzeichnisse in sequenzieller Reihenfolge ab dem ersten Verzeichnis in der sys.path
Liste eincheckt, bis es die .py
Datei findet, nach der es gesucht hat.
Idealerweise ist das aktuelle Verzeichnis oder das Verzeichnis des Skripts das erste immer das erste Element in der Liste, es sei denn, Sie ändern es, wie Sie es getan haben. Von documentation -
As initialized upon program startup, the first item of this list, path[0], is the directory containing the script that was used to invoke the Python interpreter. If the script directory is not available (e.g. if the interpreter is invoked interactively or if the script is read from standard input), path[0] is the empty string, which directs Python to search modules in the current directory first. Notice that the script directory is inserted before the entries inserted as a result of PYTHONPATH.
Also, höchstwahrscheinlich, Sie hatten eine .py
Datei mit dem gleichen Namen wie das Modul, das Sie von importieren versuchen, im aktuellen Verzeichnis (in dem das Skript aus wurde ausgeführt).
Auch eine Sache über ImportError
s zu beachten, kann sagen, die Importfehler sagen - ImportError: No module named main
- es bedeutet nicht, die main.py
überschrieben wird, nicht wenn das überschrieben wurde würden wir nicht Probleme werden mit versuchen, es zu lesen. Ein Modul darüber wurde mit einem überschrieben. py
oder eine andere Datei.
Beispiel -
Meine Verzeichnisstruktur sieht aus wie -
- test
- shared
- __init__.py
- phtest.py
- testmain.py
Jetzt ab testmain.py
, ich from shared import phtest
nennen, es funktioniert gut.
Jetzt kann sagen, dass ich ein shared.py in test
directory` vorstellen, Beispiel -
- test
- shared
- __init__.py
- phtest.py
- testmain.py
- shared.py
Jetzt, wenn ich versuche from shared import phtest
von testmain.py
zu tun, werde ich den Fehler -
ImportError: cannot import name 'phtest'
Wie Sie oben sehen können, ist die Datei, die das Problem verursacht, shared.py
, nicht phtest.py
.
Mögliche Duplikate von [Warum sys.path.append (Pfad) anstelle von sys.path.insert (1, Pfad) verwenden?] (Http://stackoverflow.com/questions/10095037/why-use-sys- path-appendpath-anstelle-von-sys-path-insert1-path) – CrandellWS