मुझे लगता है कि यह जवाब 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 क्या आप चाहते हैं।