怎么判断一个python 包是否 C extensions are involved?

问题1:
python 项目引用了一些包,怎么区别那些是纯python的包,那些是使用了 c 扩展,
有什么工具吗

问题2:
像 pynput,pyautogui,调用系统 api ,也算是使用了 c 扩展吗?


回答:

去看一下源码就知道了,里面是否有C代码。另外还要看其是否有依赖包,以及依赖包是否有C代码。依次递推下去。

调用系统API的肯定不能算使用了C扩展呀。


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

问题一:下源码,看代码

比如 numpy,下面有很多 c 代码

怎么判断一个python 包是否 C extensions are involved?

怎么判断一个python 包是否 C extensions are involved?

问题二:不算

想知道什么算,就去谷歌『为 python 编写 c 扩展』,自己走一遍就知道了


回答:

关于第一个问题已经有人在 Stackoverflow 提问过了,可以看看这个链接

也有人写了一个根据路径来检验是否是 C 代码,如果模块是 Python 主库的一部分(比如 os ),它就没有路径,可以简单参考一下:

def is_c(module):

# if module is part of the main python library (e.g. os), it won't have a path

try:

for path, subdirs, files in os.walk(module.__path__[0]):

for f in files:

ftype = f.split('.')[-1]

if ftype == 'so':

is_c = True

break

return is_c

except AttributeError:

path = inspect.getfile(module)

suffix = path.split('.')[-1]

if suffix != 'so':

return False

elif suffix == 'so':

return True

is_c(os), is_c(im), is_c(et), is_c_extension(ma), is_c(numpy)

# (False, False, True, True, True)

第二个问题,如果是调用了系统 api,应该也不能简单作为判断,任何高级语言都需要调用底层操作系统的接口吧。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

以上是 怎么判断一个python 包是否 C extensions are involved? 的全部内容, 来源链接: utcz.com/p/938804.html

回到顶部