Python Modul erstellen und importieren

Falc410

Vice Admiral
Dabei seit
Juni 2006
Beiträge
6.171
Ich dachte immer wenn ich in einen Ordner eine __init__.py Datei lege, zeige ich Python das es sich hier um ein Modul handelt.

Konrekt wollte ich in der __init__.py die Versionsnummer ablegen aber ich kann darauf nicht zugreifen.

Ich habe mal eben einen Test gemacht und einen Ordner testimport erstellt, dort eine leere __init__.py und eine test.py Datei angelegt und in test.py einfach ein import testimport und in der nächsten Zeile ein print "Hello World" und was passiert:

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

Wie kann das sein? Ich habe Beispiele bei github gesehen bei denen der Code genau so aussieht. Hier mal als Beispiel stomp.py, man vergleiche die __init__.py und dann die __main__.py macht ein import stomp.
 
Python hat einen internen Suchpfad. Wenn du ein Modul importieren willst, dann musst du dafür sorgen, dass das Verzeichnis des Moduls in diesem Suchpfad enthalten ist. Im einfachsten Fall, wenn das Modul im selben Verzeichnis liegt wie deine Hauptdatei, dann geht das so:

Code:
import sys
sys.path.append('.')  // '.' = aktuelles Verzeichnis
import testimport

stomp.py macht das in Zeile 17/18 der __main__.py.
 
Das habe ich auch gedacht - wobei in der Doku eigentlich steht das Python im PYTHONPATH und im lokalen Verzeichnis guckt.
Lustigerweise geht es wenn ich eine Datei erstelle die testimport.py heißt - dann funktioniert der import. Aber an meine Variable komme ich trotzdem nicht dran. Wahrscheinlich muss ich mir eine extra Python Datei version.py dafür erstellen. Fand die Idee mit der init halt sehr elegant.
 
In deiner testimport.py muss eine Function bestehen, in welcher dein print "Hello World!" drin steht, dann kannst du es auch ausgeben:

Code:
testimport.py
def myfct:
    print "Hello World!"

Code:
import testimport

    testimport.myfct

Hello World!

stark vereinfacht :D
 
Also ich habe eine _version.py Datei angelegt - die kann ich importieren. Ich denke ich werde noch einmal genau nachlesen müssen was für Code wirklich in einer __init__.py Datei liegen sollte.
 
Zurück
Top