ImportError: Kein Modul namens Paket

Ich fand den Import von Modulen in Python kompliziert, also mache ich Experimente, um es zu klären. Hier ist meine Dateistruktur:

PythonTest/ package/ __init__.py test.py 

Inhalt von __init__.py :

 package = 'Variable package in __init__.py' from package import test 

Inhalt von test.py :

 from package import package print package 

Wenn ich aus dem package (in PythonTest ) PythonTest und python package/test.py ausführe python package/test.py ich:

 Traceback (most recent call last): File "package/test.py", line 1, in <module> from package import package ImportError: No module named package 

Die erwartete Ausgabe ist Variable package in __init__.py . Was mache ich falsch?


Allerdings kann ich die erwartete Ausgabe im interaktiven Modus bekommen:

 sunqingyaos-MacBook-Air:PythonTest sunqingyao$ python Python 2.7.10 (default, Oct 23 2015, 19:19:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import package Package in __init__.py 

One Solution collect form web for “ImportError: Kein Modul namens Paket”

Zuerst mal sehen, wie Python nach Paketen und Modulen sucht. sys.path

Eine Liste von Strings, die den Suchpfad für Module angibt. Initialisiert aus der Umgebungsvariablen PYTHONPATH , plus eine installationsabhängige Voreinstellung.

Das sind die Suchpfade. Deshalb, wenn Ihr Modul / Paket befindet sich in einem der sys.path , Python-Interpreter ist in der Lage zu finden und zu importieren. Der doc sagt mehr:

Wie beim Programmstart initialisiert, ist das erste Element dieser Liste, path[0] , das Verzeichnis, das das Skript enthält, das verwendet wurde, um den Python-Interpreter aufzurufen. Wenn das Skriptverzeichnis nicht verfügbar ist (zB wenn der Interpreter interaktiv aufgerufen wird oder wenn das Skript aus der Standard-Eingabe gelesen wird), ist path[0] der leere String, der Python direkt in das aktuelle Verzeichnis sucht.

Ich habe test.py als Beispiel geändert.

 import sys; import pprint pprint.pprint(sys.path) from package import package print package 

Es gibt zwei Fälle:

 $ python package/test.py ['/Users/laike9m/Dev/Python/TestPython/package', '/usr/local/lib/python2.7/site-packages/doc2dash-2.1.0.dev0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/zope.interface-4.1.3-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/six-1.10.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/colorama-0.3.3-py2.7.egg', 

Wie Sie sehen, ist der path[0] /Users/laike9m/Dev/Python/TestPython/package , welches das Verzeichnis mit dem Skript test.py , das verwendet wurde, um den Python-Interpreter aufzurufen.

 $ python Python 2.7.12 (default, Jun 29 2016, 14:05:02) [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import package ['', '/usr/local/lib/python2.7/site-packages/doc2dash-2.1.0.dev0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/zope.interface-4.1.3-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/six-1.10.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/colorama-0.3.3-py2.7.egg', ... 

Nun kommt der zweite Fall, wenn interaktiv aufgerufen wird, " path[0] ist die leere Zeichenfolge, die Python direkt auf die Module im aktuellen Verzeichnis sucht." Was ist das aktuelle Verzeichnis? /Users/laike9m/Dev/Python/TestPython/ . (Schau das ist der Weg auf meiner Maschine, es entspricht dem Pfad zu PythonTest in deinem Fall)

Jetzt kennen Sie die Antworten:

  1. Warum hat python package/test.py geben ImportError: No module named package ?

    Weil der Dolmetscher das Paket nicht "sieht". Für den Dolmetscher, das PythonTest bewusst zu sein, muss PythonTest in sys.path , aber das ist nicht.

  2. Warum funktionierte das im interaktiven Modus?

    Denn jetzt ist PythonTest in sys.path , so dass der Interpreter in der Lage ist, sys.path zu finden.

  • Python - Import in if
  • Gute oder schlechte Praxis in Python: Import in der Mitte einer Datei
  • Import app in django Projekt
  • Python: 'import *' vs execfile
  • Theano importieren fehler-fenster 7
  • Albtraum mit relativen Importen, wie funktioniert pep 366?
  • Datei "<string>" im Python-Traceback
  • Importfehler: Kein Modul namens tkinter [duplicate]
  • Verhindern, dass Python die importierten Module zwischenspeichert
  • ImportError: Der Name X kann nicht importiert werden
  • Wie kann ich eine Konstante in einem importierten Python-Modul überschreiben?
  • Python ist die beste Programmiersprache der Welt.