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.path
và 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à inspect
mô-đun đặc biệt, getfile
hay 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ạ .pyc
vào .py
cá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
/ .pyd
tệ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 .so
hoặ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.so
foo.c
foomodule.c