我如何找到Python模块源的位置?
如何了解给定Python模块的源文件的安装位置? Windows上的方法与Linux上的方法不同吗?
我试图特别寻找datetime
模块的来源,但我也对更一般的答案感兴趣。
对于纯Python模块,您可以通过查看themodule.__file__
找到源代码。 但是,日期时间模块是用C编写的,因此datetime.__file__
指向一个.so文件(在Windows上没有datetime.__file__
),因此您无法看到源文件。
如果你下载了一个python源压缩包并将其解压缩,那么可以在Modules子目录中找到这些模块的代码。
例如,如果你想查找python 2.6的日期时间代码,你可以看看
Python-2.6/Modules/datetimemodule.c
您也可以在网上找到最新的Mercurial版本,网址为:https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c
从命令行运行python -v
应该告诉你什么是导入和从哪里。 这适用于Windows和Mac OS X上的我。
C:>python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:Python24libsite.pyc has bad mtime
import site # from C:Python24libsite.py
# wrote C:Python24libsite.pyc
# C:Python24libos.pyc has bad mtime
import os # from C:Python24libos.py
# wrote C:Python24libos.pyc
import nt # builtin
# C:Python24libntpath.pyc has bad mtime
...
我不确定那些不好的mtime是在我的安装上!
我意识到这个答案迟了4年,但现有的答案是误导人。
正确的做法是从不__file__
,或者试图通过sys.path
搜索自己,等等(除非你需要向后兼容2.1以上)。
它是inspect
模块 - 特别是getfile
或getsourcefile
。
除非您想学习和实施将.pyc
映射到.py
文件的规则(对于CPython 2.x有记录但痛苦,而对其他实现没有记录,或者对其他实现没有记录) 处理.zip档案,鸡蛋和模块包; 尝试使用不同方法获取不支持__file__
.so
/ .pyd
文件的路径; 搞清Jython / IronPython / PyPy的功能; 在这种情况下,去做吧。
同时,来自2.0+的每个Python版本的源代码可在http://hg.python.org/cpython/file/XY/
(例如2.7或3.3)上在线获得。 因此,一旦您发现inspect.getfile(datetime)
是.so
或.pyd
文件(如/usr/local/lib/python2.7/lib-dynload/datetime.so
,您可以在Modules目录中查找它。 严格地说,没有办法确定哪个文件定义了哪个模块,但几乎所有的都是foo.c
或foomodule.c
,所以不应该很难猜测datetimemodule.c是你想要的。
上一篇: How do I find the location of Python module sources?
下一篇: What is the best project structure for a Python application?