मुझे लगता है कि यह जवाब 4 साल की देर से है, लेकिन मौजूदा जवाब लोगों को गुमराह कर रहे हैं।
ऐसा करने का सही तरीका कभी नहीं है __file__, या sys.pathखुद के माध्यम से चलने और खोज करने की कोशिश कर रहा है , आदि (जब तक आपको 2.1 से परे पिछड़े संगत होने की आवश्यकता नहीं है)।
यह inspectमॉड्यूल है - विशेष रूप से, getfileया getsourcefile।
जब तक आप नियमों को सीखना और लागू नहीं करना चाहते हैं (जो कि दस्तावेज हैं, लेकिन दर्दनाक है, CPython 2.x के लिए, और अन्य कार्यान्वयन के लिए बिल्कुल भी प्रलेखित नहीं है, या 3.x) फ़ाइलों की मैपिंग के .pycलिए .py; .zip अभिलेखागार, अंडे और मॉड्यूल पैकेज के साथ काम करना; रास्ते .so/ .pydफ़ाइलों को प्राप्त करने के लिए विभिन्न तरीकों की कोशिश करना जो समर्थन नहीं करते हैं __file__; Jython / IronPython / PyPy क्या करते हैं; आदि किस मामले में, इसके लिए जाएं।
इस बीच, 2.0+ से प्रत्येक पायथन संस्करण का स्रोत ऑनलाइन http://hg.python.org/cpython/file/X.Y/(जैसे, 2.7 या 3.3 ) पर उपलब्ध है। इसलिए, एक बार जब आपको पता चलता है कि inspect.getfile(datetime)यह एक .soया .pydफ़ाइल की तरह है /usr/local/lib/python2.7/lib-dynload/datetime.so, तो आप इसे मॉड्यूल निर्देशिका के अंदर देख सकते हैं। कड़ाई से बोलते हुए, यह सुनिश्चित करने का कोई तरीका नहीं है कि कौन सी फ़ाइल किस मॉड्यूल को परिभाषित करती है, लेकिन उनमें से लगभग सभी foo.cया तो हैं foomodule.c, इसलिए यह अनुमान लगाना कठिन नहीं होना चाहिए कि datetimemodule.c क्या आप चाहते हैं।