Numba AOT 使用 setuptools 编译 .pyd,导入 pyd 会导致重新编译。为什么?

问题描述 投票:0回答:1

我有一些代码,通用 numba。 我正在尝试使用 setuptools 编译它,我之前在这台计算机上、在这个环境中成功完成了它,但丢失了我的 setup.py 文件。 下面立即编译代码。 下面是Setup.py。

运行 python setupnumba.py build_ext --inplace 不会引发任何错误,并创建一个 pyd 文件,但它看起来并不像是在实际编译代码。 当我导入代码时,它似乎将其视为带有 JIT 编码器的常规 python 文件,并且正在运行它。 如果我使用 if name='main' 保护“要编译的文件”内的某些代码,它将在导入时运行该代码。 在打印监视器中,导入时会打印 温度c 温度.cxx

不知道发生了什么。 我要做的就是从头开始重建 setup.py,并且是根据 numba 的文档完成的,所以我认为那里存在问题。

要编译的文件

from numba.pycc import CC
import numpy as np


cc = CC('nufit1d')

@cc.export('jacg1dsup', 'f8[:,:](f8[:],f8,f8,f8,f8)')
def jacg1dsup(x, aa, bb, cc, dd):
    xx = x[0:-1]
    size = xx.size
    j = np.empty((size, 4))
    j[:, 0] = np.ones(size)
    j[:, 1] = np.exp(-2 * (xx - cc) ** 2 / (np.abs(dd) + 0.5) ** 2)
    j[:, 2] = 4 * bb * (xx - cc) / (np.abs(dd) + 0.5) ** 2 * np.exp(-2 * (xx - cc) ** 2 / (np.abs(dd) + 0.5) ** 2)
    j[:, 3] = bb * (4 * (xx - cc) ** 2 / (np.abs(dd) + 0.5) ** 3) * np.exp(-2 * (xx - cc) ** 2 / (np.abs(dd) + 0.5) ** 2)
    return j

setup.py 文件

from setuptools import setup, Extension
from numba.pycc import CC




setup(
    name='nufit1d',
    ext_modules=[Extension('nufit1d', sources=['nfit1d.py'])],
)
setuptools numba
1个回答
0
投票

仅当前答案:如果您尝试从 numba 代码构建独立的 .[whatevs],请不要尝试使用 setuptools。 在代码末尾使用 cc.compile() ,运行它,并执行任何必要的操作以确保它与您的 C 编译器正确对话。 在 Windows 上,Vis Studio 可以工作,从相应的 Visual Studio Native Tools 命令提示符运行“python yourfile.py”。 让 cython 从 setuptools 与编译器一起工作并不会自动使 numba 与它一起工作。

© www.soinside.com 2019 - 2024. All rights reserved.