snafu hat geschrieben:Zum einen finde ich die Ausgabe nicht immer passend bei dir: [...] Da find ich es schon besser, den gesamten Namen auszugeben. (Aber vielleicht meintest du das auch mit den Elternpaketen)
Ja, genau das war gemeint, und dafür war auch ``realname`` gedacht. Eigentlich wollte ich es noch implementieren, habe mich aber dann dagegen entschieden (sowohl aus Faulheit als auch aus Klarheit: ich wollte nur die Funktionalität zeigen und nicht mit überflüssigem Code verwirren). Leider habe ich dann beim Pasten das ``realname`` übersehen, was ich dann aber wirklich keinen neuen Paste wert fand.
snafu hat geschrieben:
Zum anderen versagt deine Version bei Modulen unterhalb des Arbeitsverzeichnisses:
Code: Alles auswählen
~$ python test.py test.test
No module named test
~$ locmod test.test
/home/sebastian/test/test.py
Das kann ich nur reproduzieren, wenn in "test" die "__init__.py" fehlt, was dann aber kein Versagen sondern korrektes Verhalten wäre (deine Version findet dann übrigens trotzdem "test.test"). Außerdem finde ich es eh verwirrend, sowohl ein Modul "test" zu haben (meine Version, die du wohl "test.py" genannt hast) als auch ein Package "test".
snafu hat geschrieben:Übrigens verstehe ich auch nicht, was path and [path] bringen soll. Wenn ich das teste, wird immer nur [path] benutzt. Meintest du vielleicht "or"?
Nein, das ``and`` stimmt schon so. Wenn `imp.find_module` kein ``path``-Argument übergeben wird oder selbiges ``None`` als Wert hat, wird (u.a.) ``sys.path`` durchsucht. Also wird zunächst ``path`` auf ``None`` gesetzt. Dann wird nach dem äußersten Package gesucht. Dabei soll eben ``sys.path`` komplett durchsucht werden, was es auch wird, da ``path and [path]`` zu ``None`` evaluiert wird. Danach wird ``path`` überschrieben, und zwar mit dem Pfad des Packages. Danach wird das nächstinnere Modul/Package gesucht, diesmal soll aber nur im Verzeichnis des äußeren Packages gesucht werden. Und diesmal evaluiert ``path and [path]`` eben zu einer Liste mit einem Element, dem Pfad des äußeren Packages.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)