Python-Fehler "ImportError: No module named"

Python wird in einem lokalen Verzeichnis installiert.

Mein Verzeichnisbaum sieht wie folgt aus:

(local directory)/site-packages/toolkit/interface.py

Mein Code befindet sich hier:

(local directory)/site-packages/toolkit/examples/mountain.py

Um das Beispiel auszuführen, schreibe ich python mountain.py, und im Code habe ich:

from toolkit.interface import interface

Und ich bekomme den Fehler:

Traceback (most recent call last):
  File "mountain.py", line 28, in ?
    from toolkit.interface import interface
ImportError: No module named toolkit.interface

Ich habe bereits sys.path überprüft und dort habe ich das Verzeichnis /site-packages. Außerdem habe ich die Datei __init__.py.bin im Toolkit-Ordner, um Python zu zeigen, dass es sich um ein Paket handelt. Ich habe auch eine __init__.py.bin im examples Verzeichnis.

Ich weiß nicht, warum Python die Datei nicht finden kann, wenn sie in sys.path liegt. Hat jemand eine Idee? Kann es ein Berechtigungsproblem sein? Brauche ich eine Ausführungserlaubnis?

Lösung

Ausgehend von Ihren Kommentaren zum Beitrag von orip's, vermute ich, dass dies der Fall war:

  1. Du hast __init__.py unter Windows bearbeitet.
  2. Der Windows-Editor hat etwas nicht-druckendes hinzugefügt, vielleicht ein Carriage-Return (Zeilenende in Windows ist CR/LF; in Unix ist es nur LF), oder vielleicht ein CTRL-Z (Windows-Ende der Datei).
  3. Sie haben WinSCP benutzt, um die Datei auf Ihre Unix-Box zu kopieren.
  4. WinSCP dachte: "Hier steht etwas, das kein einfacher Text ist; ich füge eine .bin-Erweiterung hinzu, um binäre Daten zu kennzeichnen."
  5. Das fehlende __init__.py (jetzt __init__.py.bin genannt) bedeutet, dass Python Toolkit nicht als Paket versteht.
  6. Sie erstellen __init__.py im entsprechenden Verzeichnis und alles funktioniert... ?
Kommentare (7)

Hat

(local directory)/site-packages/toolkit

eine __init__.py?

Damit import durch Ihre Verzeichnisse gehen kann, muss jedes Verzeichnis eine __init__.py-Datei haben.

Kommentare (2)

Um ein Verzeichnis als Paket zu markieren, braucht man eine Datei namens __init__.py, hilft das?

Kommentare (8)