Me doy cuenta de que esta respuesta lleva 4 años de retraso, pero las respuestas existentes son engañosas.
La forma correcta de hacerlo es nunca __file__, o tratar de caminar sys.pathy buscar por ti mismo, etc. (a menos que necesites ser compatible con versiones anteriores más allá de 2.1).
Es el inspectmódulo, en particular, getfileo getsourcefile.
A menos que desee aprender e implementar las reglas (que están documentadas, pero son dolorosas, para CPython 2.x, y no están documentadas en absoluto para otras implementaciones, o 3.x) para la asignación .pyca .pyarchivos; tratar con archivos .zip, huevos y paquetes de módulos; probando diferentes formas de obtener la ruta a .so/ .pydarchivos que no son compatibles __file__; averiguar qué hacen Jython / IronPython / PyPy; En cuyo caso, hazlo.
Mientras tanto, la fuente de cada versión de Python desde 2.0+ está disponible en línea en http://hg.python.org/cpython/file/X.Y/(por ejemplo, 2.7 o 3.3 ). Entonces, una vez que descubra que inspect.getfile(datetime)es un archivo .soo , puede buscarlo dentro del directorio Módulos. Estrictamente hablando, no hay forma de estar seguro de qué archivo define qué módulo, pero casi todos son o , por lo que no debería ser difícil adivinar que datetimemodule.c es lo que desea..pyd/usr/local/lib/python2.7/lib-dynload/datetime.sofoo.cfoomodule.c