我如何了解一个给定的Python模块的源文件安装在哪里?Windows上的方法和Linux上的方法不同吗?

我特别试图寻找datetime模块的源代码,但我对更一般的答案也感兴趣。


当前回答

并非所有的python模块都是用python编写的。Datetime恰好是其中之一,并且(在linux上)是Datetime。

你必须将源代码下载到python标准库才能得到它。

其他回答

我意识到这个答案晚了4年,但现有的答案在误导人们。

正确的方法是永远不要__file__,或者尝试遍历sys. file__。路径和搜索自己,等等(除非你需要向后兼容超过2.1)。

它是inspect模块——特别是getfile或getsourcefile。

除非你想学习和实现CPython 2的规则(这些规则有文档,但很痛苦)。3.x)用于将.pyc映射到.py文件;处理.zip档案、eggs和模块包;尝试不同的方法得到。so/的路径。不支持__file__的Pyd文件;弄清楚Jython/IronPython/PyPy做什么;等。在这种情况下,放手去做吧。

Meanwhile, every Python version's source from 2.0+ is available online at http://hg.python.org/cpython/file/X.Y/ (e.g., 2.7 or 3.3). So, once you discover that inspect.getfile(datetime) is a .so or .pyd file like /usr/local/lib/python2.7/lib-dynload/datetime.so, you can look it up inside the Modules directory. Strictly speaking, there's no way to be sure of which file defines which module, but nearly all of them are either foo.c or foomodule.c, so it shouldn't be hard to guess that datetimemodule.c is what you want.

只是更新答案,以防现在有人需要它,我在Python 3.9和使用Pip来管理包。就用pip show,例如:

pip show numpy

它将为您提供所有详细信息,包括pip存储所有其他包的位置。

并非所有的python模块都是用python编写的。Datetime恰好是其中之一,并且(在linux上)是Datetime。

你必须将源代码下载到python标准库才能得到它。

从标准库尝试imp.find_module

>>> import imp
>>> imp.find_module('fontTools')
(None, 'C:\\Python27\\lib\\site-packages\\FontTools\\fontTools', ('', '', 5))
>>> imp.find_module('datetime')
(None, 'datetime', ('', '', 6))

对于一个纯python模块,你可以通过查看module.__file__找到源代码。 然而,datetime模块是用C语言编写的,因此datetime模块是用C语言编写的。__file__指向一个.so文件(没有datetime. so文件)。__file__在Windows上),因此,你不能看到源代码。

如果你下载一个python源tarball并提取它,模块的代码可以在modules子目录中找到。

例如,如果你想找到python 2.6的datetime代码,你可以查看

Python-2.6/Modules/datetimemodule.c

你也可以在github上找到这个文件的最新版本 https://github.com/python/cpython/blob/main/Modules/_datetimemodule.c