Seite 1 von 1

Windows Import Problem

Verfasst: Mittwoch 22. Dezember 2010, 19:18
von julianibus
Hallo,
auf Linux hab ich die letzten Monate an einem größeren Spiel gearbeitet und möchte es nun auch auf Windows spielbar machen. Ich habe Pygame verwendet und da python und pygame cross-platform sind sollte dies kein allzugroßes Problem sein.

Es habert an einer Stelle im Programm: Zur Laufzeit importiere ich Module, die das Level im Spiel bestimmen.
Und zwar so:

Code: Alles auswählen

lev = __import__(os.path.join(str("levels/", cfg.get("script"))))
cfg.get("mission","script") ist der relative Pfad zum Levelmodul, der in einer Config-Datei festgelegt wird, die so aussieht:

Code: Alles auswählen

script = scripts/tutorial
So funktioniert das unter Linux und Mac OS wunderbar.
Nur unter Windows will es nicht klappen:

Fehler:

Code: Alles auswählen

ImportError: No module named levels\scripts\tutorial
Wenn ich Slash zu Backslash mache, keine Änderung.
Weiß jemand voran das liegt und wie ich das beheben kann?

achja: Das Modul ist natürlich da: ...\levels\scripts\tutorial.py

lg julianibus

Re: Windows Import Problem

Verfasst: Mittwoch 22. Dezember 2010, 23:03
von BlackJack
@julianibus: Du gehst davon aus, dass sich das Verzeichnis, in dem sich das `levels`-Verzeichnis befindet, auch im Arbeitsverzeichnis des Prozesses befindet. Das muss aber nicht der Fall sein -- auch unter den anderen Systemen nicht!

Man könnte die Daten relativ zu einem Modul angeben, dessen Dateinamen im `__file__`-Attribut findet.

Re: Windows Import Problem

Verfasst: Donnerstag 23. Dezember 2010, 14:36
von julianibus
Das ist mir klar.
da die Pfade relativ sind, starte ich das Programm ja vom RICHTIGEN Verzeichnis aus, auch unter Windows. Daran liegt es nicht.

Re: Windows Import Problem

Verfasst: Donnerstag 23. Dezember 2010, 16:05
von bwbg
Das "aus dem richtigen Verzeichnis ausführen" funktioniert unter Windows IIRC nur verlässlich aus der Eingabeaufforderung raus. Beim "Doppelklicken" muss das nicht der Fall sein.

Daher solltest du, wie BlackJack schon schrieb, auf __file__ setzen.

Grüße ... bwbg

Re: Windows Import Problem

Verfasst: Donnerstag 23. Dezember 2010, 18:47
von julianibus
Natürlich muss man das noch von der Kommandozeile aus starten wegen dem relativen Pfad. Soäter werde ich mit auch __file__ achauen, aber das ist noch nicht das Problem, das ich habe. Wie importiere ich unter Windows ein Modul zur Laufzeit? Das im ersten Post Beschriebene funktioniert nicht, obweohl ich das Programm von der Kommandozeile starte und zwar so, das die relativen Pfadangaben stimmen.

lg julianibus

Re: Windows Import Problem

Verfasst: Donnerstag 23. Dezember 2010, 21:50
von Sr4l
julianibus hat geschrieben:Und zwar so:

Code: Alles auswählen

lev = __import__(os.path.join(str("levels/", cfg.get("script"))))
Das funktioniert unter Linux? str("levels", ..) sollte nen TypError werfen.
julianibus hat geschrieben:Fehler:

Code: Alles auswählen

ImportError: No module named levels\scripts\tutorial
Natürlich ist levels\scripts... kein Python Modul.
In Python kommt man mit level.scripts.tutorial an tutorial.py im Ordner scripts im Ordner levels, sowohl bei der Benutzung von import wie __import__. Das ist aber auch bei Linux nicht anders.