如何检测指定Python模块是否通过mypyc编译?
检测Python程序是否由mypyc编译的方法
方法一:利用mypyc内置的MYPYC常量
mypyc在编译代码时会自动定义MYPYC常量为True,普通Python解释器环境下该常量不存在。你可以通过以下代码检测:
try: from mypyc.attrs import MYPYC is_mypyc_compiled = MYPYC except ImportError: is_mypyc_compiled = False # 将结果纳入版本信息 version_info = { "version": "1.0.0", "compiled_with_mypyc": is_mypyc_compiled }
也可以直接检查全局作用域中的MYPYC(适合在模块内部直接判断):
try: is_mypyc_compiled = MYPYC except NameError: is_mypyc_compiled = False
这种方式是最可靠的,因为MYPYC是mypyc编译流程中注入的专属标识,不会和其他C扩展或工具混淆。
方法二:检查模块文件后缀(补充方案)
mypyc编译后的模块会生成平台相关的共享库文件:Linux/macOS下后缀为.so,Windows下为.pyd。可以通过模块的__file__属性判断:
import os import sys def check_mypyc_compiled(): current_module = sys.modules[__name__] if not hasattr(current_module, '__file__'): return False file_ext = os.path.splitext(current_module.__file__)[1].lower() return file_ext in ('.so', '.pyd') is_compiled = check_mypyc_compiled()
注意:这种方法存在误判可能——其他Python C扩展模块也会使用相同后缀,因此仅推荐作为第一种方法的补充验证手段。
内容的提问来源于stack exchange,提问作者Newbyte
相关产品推荐
相关产品推荐

