为了账号安全,请及时绑定邮箱和手机立即绑定

如何找到Python模块源的位置?

/ 猿问

如何找到Python模块源的位置?

12345678_0001 2019-08-14 17:29:16

如何找到Python模块源的位置?

如何了解安装给定Python模块的源文件的位置?Windows上的方法与Linux上的方法不同吗?

我正在努力寻找datetime模块的来源,但我也对更一般的答案感兴趣。


查看完整描述

3 回答

?
哈士奇WWW

对于纯python模块,您可以通过查看来查找源代码themodule.__file__。但是,datetime模块是用C语言编写的,因此datetime.__file__指向.so文件(datetime.__file__Windows 上没有),因此您无法看到源代码。

如果您下载python源代码tarball并将其解压缩,则可以在Modules子目录中找到模块的代码。

例如,如果要查找python 2.6的日期时间代码,可以查看

Python-2.6/Modules/datetimemodule.c

您还可以在网站上找到最新的Mercurial版本:https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c


查看完整回答
反对 回复 2019-08-14
?
慕运维8079593

python -v从命令行运行应该告诉您正在导入什么以及从哪里导入。这适用于Windows和Mac OS X.


C:\>python -v

# installing zipimport hook

import zipimport # builtin

# installed zipimport hook

# C:\Python24\lib\site.pyc has bad mtime

import site # from C:\Python24\lib\site.py

# wrote C:\Python24\lib\site.pyc

# C:\Python24\lib\os.pyc has bad mtime

import os # from C:\Python24\lib\os.py

# wrote C:\Python24\lib\os.pyc

import nt # builtin

# C:\Python24\lib\ntpath.pyc has bad mtime

...

我不确定那些糟糕的mtime是什么在我的安装上!


查看完整回答
反对 回复 2019-08-14
?
杨魅力

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

做到这一点的正确方法是永远不要__file__,或者试图通过sys.path搜索自己等等(除非你需要向后兼容超过2.1)。

这是inspect模块 - 特别是,getfilegetsourcefile

除非你想要学习和实现规则(对于CPython 2.x而言是有记录的,但是很痛苦,对于其他实现,或者根本没有记录到其他实现,或3.x),以便映射.pyc.py文件; 处理.zip档案,鸡蛋和模块包; 尝试不同的方法来获取不支持的.so.pyd文件的路径__file__; 弄清楚Jython / IronPython / PyPy做了什么; 在这种情况下,去吧。

同时,每个Python版本的2.0+源代码都可以在线获得http://hg.python.org/cpython/file/X.Y/(例如,2.73.3)。所以,一旦你发现它inspect.getfile(datetime)是一个.so.pyd类似文件/usr/local/lib/python2.7/lib-dynload/datetime.so,你可以在Modules目录中查找它。严格地说,没有办法确定哪个文件定义了哪个模块,但几乎所有模块都是foo.c或者foomodule.c,所以不应该猜测datetimemodule.c是你想要的。


查看完整回答
反对 回复 2019-08-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信