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