Sei que esta resposta está atrasada 4 anos, mas as respostas existentes são pessoas enganosas.
A maneira correta de fazer isso é nunca __file__, ou tentar percorrer sys.pathe procurar você mesmo, etc. (a menos que você precise ser compatível com versões anteriores a 2.1).
É o inspectmódulo - em particular, getfileou getsourcefile.
A menos que você queira aprender e implementar as regras (que são documentadas, mas dolorosas, para o CPython 2.xe não são documentadas para outras implementações, ou 3.x) para mapear .pycpara .pyarquivos; lidar com arquivos .zip, ovos e pacotes de módulos; tentando maneiras diferentes de obter o caminho para .so/ .pydarquivos que não suportam __file__; descobrir o que o Jython / IronPython / PyPy faz; etc. Nesse caso, vá em frente.
Enquanto isso, a fonte de todas as versões Python do 2.0+ está disponível online em http://hg.python.org/cpython/file/X.Y/(por exemplo, 2.7 ou 3.3 ). Assim, depois de descobrir que inspect.getfile(datetime)é um arquivo .soou , você pode procurá-lo dentro do diretório Modules. Estritamente falando, não há como ter certeza de qual arquivo define qual módulo, mas quase todos são ou , portanto, não deve ser difícil adivinhar que datetimemodule.c é o que você deseja..pyd/usr/local/lib/python2.7/lib-dynload/datetime.sofoo.cfoomodule.c