You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用setuptools编译Numba AOT生成.pyd,导入时为何触发重编译?

Numba pycc编译后导入异常的修复方案

问题根源

你当前的setup.py错误地使用了setuptools的Extension类来处理Numba pycc脚本。Numba的CC模块本身就是用来生成编译扩展的工具,不需要通过setuptools的普通Extension流程处理——这种方式生成的.pyd文件并非Numba编译后的有效扩展,导入时Python会依然执行原.py脚本的逻辑,包括触发JIT编译(生成temp.c/temp.cxx)、执行if __name__=='__main__'代码块。

正确解决方案

方案1:直接用Numba pycc命令编译

不需要编写setup.py,直接在命令行执行:

python -m numba.pycc nfit1d.py --inplace

该命令会直接通过Numba的CC工具生成正确的.pyd扩展文件。

方案2:正确编写setup.py

如果一定要用setuptools管理编译,需利用CC实例的distutils_extension()方法生成对应的扩展配置,正确的setup.py代码如下:

from setuptools import setup
# 导入你的pycc脚本中定义的CC实例
from nfit1d import cc

setup(
    name='nufit1d',
    ext_modules=[cc.distutils_extension()]
)

执行编译命令:

python setup.py build_ext --inplace

额外注意事项

编译完成后,确保生成的nufit1d.pyd文件与原nfit1d.py文件的导入优先级:

  • 可以将原nfit1d.py移走或重命名,避免Python导入时优先加载原脚本而非编译后的扩展。

内容的提问来源于stack exchange,提问作者Matt Reed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:21:04