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.pathund nach sich selbst zu suchen usw. (es sei denn, Sie müssen ab 2.1 abwärtskompatibel sein).
Es ist das inspectModul - insbesondere getfileoder 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 .pyczu .pyDateien lernen und implementieren . Umgang mit .zip-Archiven, Eiern und Modulpaketen; verschiedene Wege ausprobieren, um den Pfad zu .so/ .pydDateien 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 .sooder eine .pydDatei 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.coder foomodule.c, daher sollte es nicht schwer sein zu erraten, dass datetimemodule.c das ist, was Sie wollen.