[Python-de] Frage zur Importierung und Zugriff auf eine Funktion aus einer übergeordneten Datei

Ulf Rompe python-de at rompe.org
Di Apr 6 12:02:19 UTC 2010


Am 06.04.2010 01:48, schrieb Christopher Arndt:
> Aus der standard library reference:
>
> "As initialized upon program startup, the first item of this list,
> path[0], is the directory containing the script that was used to invoke
> the Python interpreter. If the script directory is not available (e.g.
> if the interpreter is invoked interactively or if the script is read
> from standard input), path[0] is the empty string, which directs Python
> to search modules in the current directory first. Notice that the script
> directory is inserted before the entries inserted as a result of PYTHONPATH.
>
> A program is free to modify this list for its own purposes."
>
> Ich hatte also auch nicht ganz recht, aber so wie du es beschreibst ist
> es nicht Standard und man sollte sich nicht darauf verlassen.

In allen Situationen, in denen man den Suchpfad relativ zur aktuellen 
Datei erweitern muss oder auch nur möchte, kann man sich auch auf ein 
korrekt gesetztes sys.path[0] verlassen.

Wenn man interaktiv im Interpreter arbeitet oder Scripts auf stdin an 
ihn übergibt, kann man ja dieses Bedürfnis auch gar nicht haben. In 
genau diesen Fällen versagt übrigens auch os.path.dirname(__file__) ganz 
kläglich, weil __file__ dann nicht definiert ist. Man könnte nun 
versuchen, das abzufangen und irgendetwas anderes zu machen, aber man 
müsste schon definieren, was denn überhaupt eine sinnvolle Aktion wäre. 
Möglicherweise wäre sinnvoll, dann das dem aktuellen Arbeitsverzeichnis 
übergeordnete Verzeichnis zu wählen. Genau das macht meine Variante 
zufällig, aber ob es tatsächlich eine sinnvolle Anwendung dafür gibt, 
ist eher fraglich.

Wie gesagt: Wenn man es braucht, funktioniert es auch. Wo es nicht 
funktioniert, braucht man es auch nicht.

Einziger Wermutstropfen dabei: Pylint braucht etwas Schützenhilfe, um 
diese Pfaderweiterung zu verfolgen.

[x] ulf

-- 
Rome did not create a great empire by having meetings,
they did it by killing all those who opposed them.



Mehr Informationen über die Mailingliste python-de