Tôi nhận ra câu trả lời này trễ 4 năm, nhưng những câu trả lời hiện có là những người hiểu lầm.
Cách đúng đắn để làm điều này là không bao giờ __file__, hoặc cố gắng đi qua sys.pathvà tìm kiếm chính mình, v.v. (trừ khi bạn cần phải tương thích ngược hơn 2.1).
Đó là inspectmô-đun đặc biệt, getfilehay getsourcefile.
Trừ khi bạn muốn tìm hiểu và thực hiện các quy tắc (được ghi lại, nhưng đau đớn, đối với CPython 2.x và hoàn toàn không được ghi lại cho các triển khai khác, hoặc 3.x) để ánh xạ .pycvào .pycác tệp; đối phó với tài liệu lưu trữ .zip, trứng và các gói mô-đun; thử các cách khác nhau để có được đường dẫn đến .so/ .pydtệp không hỗ trợ __file__; tìm ra những gì Jython / IronPython / PyPy làm; vv Trong trường hợp này, đi cho nó.
Trong khi đó, mọi nguồn của phiên bản Python từ 2.0+ đều có sẵn trực tuyến tại http://hg.python.org/cpython/file/X.Y/(ví dụ: 2.7 hoặc 3.3 ). Vì vậy, một khi bạn phát hiện ra đó inspect.getfile(datetime)là một tập tin .sohoặc , bạn có thể tra cứu nó trong thư mục Modules. Nói một cách chính xác, không có cách nào để chắc chắn tập tin nào xác định mô-đun nào, nhưng gần như tất cả chúng đều hoặc , do đó, không khó để đoán rằng datetimemodule.c là những gì bạn muốn..pyd/usr/local/lib/python2.7/lib-dynload/datetime.sofoo.cfoomodule.c