我如何找到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模块 - 特别是getfilegetsourcefile

除非您想学习和实施将.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.cfoomodule.c ,所以不应该很难猜测datetimemodule.c是你想要的。

链接地址: http://www.djcxy.com/p/38595.html

上一篇: How do I find the location of Python module sources?

下一篇: What is the best project structure for a Python application?