Seite 1 von 1

Problem mit import-Statement

Verfasst: Sonntag 5. Juli 2009, 11:24
von nilshero
Hallo, Leute ...

Ich verwende Python 3.0, 'C:/' liegt bei mir auf dem Pythonpfad (PYTHONPFAD und .pth-Dateien).

Dann habe ich ein Verzeichnis C:/meinPackage/, das auch eine '__init__.py' enthält.
In dem Verzeichnis liegt eine Datei 'modul.py', die eine Funktion 'func' enthält.

Dann habe ich ein Verzeichnis C:/scripts/ (nicht auf dem Pythonpfad, muß ja auch nicht, weil ich die Dateien direkt ausführe (Habs aber auch mit getestet))
In dem Verzeichnis liegt eine Datei 'meinScript.py'. Die tut folgendes:

Code: Alles auswählen

from meinPackage.modul import func as tuewas
Wenn ich die meinScript.py nun ausführe, wird ein ImportError geworfen: 'No module named modul.py'

What is going on here ? Was mach ich falsch ?

Gruß, Nils

Verfasst: Sonntag 5. Juli 2009, 12:05
von cofi
1. Lass dir mal ``sys.path`` ausgeben, um zu ueberpruefen, dass der Path passt
2. Wenn das nicht nur ein Beispiel zum ausprobieren ist, pack das Paket in den Ordner, wenn es nur fuer das aktuelle Programm ist bzw in ``site-packages``, wenn es global nutzbar sein soll - damit vermeidet man das PATH Problem
3. Wie startest du die Skripte? Auf der Kommandozeile oder per "Klick"?

Btw: Nimm Python 3.1 das ist stable, Python 3.0 ist tot.

Verfasst: Sonntag 5. Juli 2009, 12:49
von nilshero
>> Btw: Nimm Python 3.1 das ist stable, Python 3.0 ist tot.

Ja 3.1 hat einige nette Features ({} in formatstrings), ich habs auch installiert, problem nur: das Package Comtypes läuft unter der Version nicht )-:

Aber abgesehen davon, is doch seltsam daß das nicht funktioniert, eigentlich sollte es ja so gehen, nicht wahr?

Gruß, Nils

p.s. Warum eigentlich 'tot' sind da schwere Bugs drin?
--- edit --
Ah ich lese es gerade:
http://mail.python.org/pipermail/python ... 18561.html

Gelöst

Verfasst: Sonntag 5. Juli 2009, 18:19
von nilshero
Python-Pakete müssen mehr als zwei Buchstaben lang sein.
Meines war nur einen lang.

Wo ist der 'gelöst'- Button versteckt?

Verfasst: Sonntag 5. Juli 2009, 18:35
von snafu
Den gibt es aus gutem Grund nicht.

Verfasst: Sonntag 5. Juli 2009, 19:45
von Leonidas
snafu hat geschrieben:Den gibt es aus gutem Grund nicht.
Den man in den FAQ auch nachschlagen kann *hint* :)

Verfasst: Montag 6. Juli 2009, 11:42
von nilshero
He Leute, seid nicht so Kryptisch ('Kryptisch' kann man im Brockhaus nachschlagen - Sind nur 25 Bände :D )

Ich dachte, es gäbe beim BB-Forum so einen Button und in der FAQ (http://www.python-forum.de/faq.php) sehe ich dazu nichts.

Gruß, Nils

Verfasst: Montag 6. Juli 2009, 11:54
von snafu
Also ich meinte das nicht kryptisch. Ich wusste auch gar nicht, dass das in den FAQ steht. Hab's übrigens auch nicht gefunden.

Verfasst: Montag 6. Juli 2009, 12:01
von Leonidas
nilshero hat geschrieben:Ich dachte, es gäbe beim BB-Forum so einen Button und in der FAQ (http://www.python-forum.de/faq.php) sehe ich dazu nichts.
Nein, in phpBB 2.0 gibt es so einen Button nicht, und in den [wiki]Forum/Regeln[/wiki] steht folgendes (ja, nicht in den FAQ, Fehler meinerseits):
Regeln, 5.3 hat geschrieben:Ein kleines "Dankeschön" wirkt Wunder und motiviert andere dir bei späteren Problemen wieder zu helfen. Es ist nicht nötig den Thread durch Ändern des Titels als "[gelöst]" zu markieren, denn auch ein vermeintlich gelöster Thread kann noch zu einer besseren Lösung oder einer interessanten Diskussion führen, die es so nicht gäbe wenn der Thread dadurch abgeschlossen wäre.
Die [wiki]FAQ[/wiki] stehen übrigens im Wiki, nicht in diesem komischen phpBB-Sinnlos-FAQ, den sowieso keiner liest.

Verfasst: Dienstag 7. Juli 2009, 13:49
von nilshero
Ok - Dankeschön! :D

Re: Gelöst

Verfasst: Mittwoch 8. Juli 2009, 18:33
von birkenfeld
nilshero hat geschrieben:Python-Pakete müssen mehr als zwei Buchstaben lang sein.
Meines war nur einen lang.
Das ist so allerdings nicht richtig. Modul- und Packagenamen müssen lediglich gültige Identifier sein, dürfen aber auch Länge 1 haben.

Re: Gelöst

Verfasst: Donnerstag 9. Juli 2009, 18:25
von nilshero
birkenfeld hat geschrieben:
Das ist so allerdings nicht richtig. Modul- und Packagenamen müssen lediglich gültige Identifier sein, dürfen aber auch Länge 1 haben.
Hmm, ich bin gerade in I-Net-Cafe, aber ich bin mir sicher, es hat Zuhause nicht funktioniert, als ich dem Paketnamen einen Buchstaben gab.

Also:

Code: Alles auswählen

from a.a import a as lorem
... wirft einen Import-Error, aber ...

Code: Alles auswählen

from aa.a import a as lorem
... funktioniert (Natürlich habe ich jeweils immer den Pfad angepasst und die Verzeichnisse entsprechend umbenannt).

Geprüft mit Python 3.0 (edit: unter win XP)

Gruß, Nils

Verfasst: Donnerstag 9. Juli 2009, 18:32
von birkenfeld
Kann das mal jemand mit Windows ausprobieren? Hier funktionierts wunderbar...