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

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

我正在尝试特别寻找datetime模块的来源,但我也对更通用的答案感兴趣。

#1楼

我知道这个答案要晚4年了,但是现有的答案会误导人们。

正确的方法永远不要__file__ ,或尝试遍历sys.path并进行搜索等(除非您需要向后兼容2.1以上)。

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

除非您要学习和实现用于将.pyc映射到.py文件的规则(对于CPython 2.x,已记录但很痛苦,而对于其他实现或3.x则没有任何记录); 处理.zip归档文件,鸡蛋和模块包; 尝试以不同的方式获得不支持__file__ .so / .pyd文件的路径; 弄清楚Jython / IronPython / PyPy的作用; 等等。在这种情况下,请继续努力。

同时,可以从http://hg.python.org/cpython/file/XY/ (例如2.7或3.3 )在线获取2.0+以后的每个Python版本的源代码。 因此,一旦发现inspect.getfile(datetime)是一个.so或.pyd文件(例如/usr/local/lib/python2.7/lib-dynload/datetime.so ,就可以在Modules目录中查找它。 严格来说,无法确定哪个文件定义了哪个模块,但是几乎所有文件都是foo.c或foomodule.c ,因此不难猜测datetimemodule.c是您想要的。

#2楼

这是获取模块文件名的一种方法,适用于shell别名:

echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)' | python -

设置为别名:

alias getpmpath="echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)' | python - "

使用方法:

$ getpmpath twisted

/usr/lib64/python2.6/site-packages/twisted/__init__.pyc

$ getpmpath twisted.web

/usr/lib64/python2.6/site-packages/twisted/web/__init__.pyc

#3楼

>>> import imp

>>> imp.find_module('fontTools')

(None, 'C:\\Python27\\lib\\site-packages\\FontTools\\fontTools', ('', '', 5))

>>> imp.find_module('datetime')

(None, 'datetime', ('', '', 6))

#4楼

在Windows上,您可以找到python模块的位置,如下所示:ie find rest_framework模块

#5楼

sys.path列表包含将在运行时搜索模块的目录列表:

python -v

>>> import sys

>>> sys.path

['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值