怎么判断一个python 包是否 C extensions are involved?
问题1:
python 项目引用了一些包,怎么区别那些是纯python的包,那些是使用了 c 扩展,
有什么工具吗
问题2:
像 pynput,pyautogui,调用系统 api ,也算是使用了 c 扩展吗?
回答:
去看一下源码就知道了,里面是否有C代码。另外还要看其是否有依赖包,以及依赖包是否有C代码。依次递推下去。
调用系统API的肯定不能算使用了C扩展呀。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
回答:
问题一:下源码,看代码
比如 numpy,下面有很多 c 代码
问题二:不算
想知道什么算,就去谷歌『为 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