Python Modul erstellen und importieren

Falc410

Captain
Dabei seit
Juni 2006
Beiträge
3.164
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.
 

NullPointer

Lt. Commander
Dabei seit
Okt. 2009
Beiträge
1.570
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.
 

Falc410

Captain
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
3.164
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.
 

Telmur

Ensign
Dabei seit
Jan. 2015
Beiträge
223
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
 

Falc410

Captain
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
3.164
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.
 
Top