Mir ist klar, dass diese Antwort 4 Jahre zu spät ist, aber die vorhandenen Antworten sind irreführend.
Der richtige Weg, dies zu tun, ist niemals __file__
, oder zu versuchen, durchzugehen sys.path
und nach sich selbst zu suchen usw. (es sei denn, Sie müssen ab 2.1 abwärtskompatibel sein).
Es ist das inspect
Modul - insbesondere getfile
oder getsourcefile
.
Es sei denn, Sie möchten die Regeln (die für CPython 2.x dokumentiert, aber für andere Implementierungen oder 3.x überhaupt nicht dokumentiert sind) für die Zuordnung .pyc
zu .py
Dateien lernen und implementieren . Umgang mit .zip-Archiven, Eiern und Modulpaketen; verschiedene Wege ausprobieren, um den Pfad zu .so
/ .pyd
Dateien zu erhalten, die nicht unterstützt werden __file__
; herauszufinden, was Jython / IronPython / PyPy tun; usw. In diesem Fall machen Sie es.
In der Zwischenzeit ist die Quelle jeder Python-Version ab 2.0+ online verfügbar http://hg.python.org/cpython/file/X.Y/
(z. B. 2.7 oder 3.3 ). Sobald Sie feststellen, dass inspect.getfile(datetime)
es sich um eine .so
oder eine .pyd
Datei handelt /usr/local/lib/python2.7/lib-dynload/datetime.so
, können Sie sie im Modulverzeichnis nachschlagen. Genau genommen gibt es keine Möglichkeit, sicher zu sein, welche Datei welches Modul definiert, aber fast alle sind entweder foo.c
oder foomodule.c
, daher sollte es nicht schwer sein zu erraten, dass datetimemodule.c das ist, was Sie wollen.