cythonimport只运行一次,然后给出一个gcc.b

2024-05-23 06:45:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在64位windows8机器上用Anaconda/Spyder编写一个Python程序。我知道所有的问题合同通用条款.bat("合同通用条款.bat'失败退出状态1“),我已经修复-几乎。我的pyx文件(称为testFunc.pyx)包含以下代码:

import numpy as np
cimport numpy as np

def funcMatUtility(np.ndarray[np.float64_t, ndim=1] vecX,
                   np.ndarray[np.float64_t, ndim=1] vecE):
    cdef np.ndarray[np.float64_t, ndim=2] out = \
        np.zeros((len(vecX),len(vecE)),dtype=np.float64)
    for iX, valX in enumerate(vecX):
        for iE, valE in enumerate(vecE):
            out[iX,iE] = valX + valE
    return out

我通过在Spyder中运行以下py文件来调用此函数:

^{pr2}$

如果没有os.environ['CPATH'] = np.get_include()行,我得到合同通用条款.bat立即发送错误消息。如果没有install()中的设置参数,我会收到另一条错误消息:Unable to find vcvarsall.bat。在

因此,通过这些行,我可以编译Cython代码,这表明我首先需要在Windows机器上运行Cython编译器。但问题是我只能做一次。如果想再次导入它,例如,因为我仍在开发我的代码,而我只做了一个测试运行,我得到合同通用条款.bat再次出现错误消息(gcc.bat failed with exit status 1),除非我关闭并重新打开Spyder。我只使用import语句尝试第二次导入(即不再导入pyximport),但没有成功。为什么我只能编译一次Cython代码?在


Tags: 代码机器消息错误npoutcython条款
1条回答
网友
1楼 · 发布于 2024-05-23 06:45:17

我想我找到了问题(以及解决方案):我需要告诉编译器我正在使用numpy。我在这里找到了解释:https://github.com/cython/cython/wiki/InstallingOnWindows

因此py文件应该是

import numpy
import pyximport
pyximport.install(
    setup_args={"script_args":[" compiler=mingw32"],
    "include_dirs":numpy.get_include()},reload_support=True)
import testFunc
x = testFunc.funcMatUtility(np.array([0.0,1.0,2.0]),np.array([0.0,1.0,2.0,3.0]))

'include_dirs'部分告诉编译器我使用的是numpy。这一点在Spyder中也适用,也适用于重复运行。在

相关问题 更多 >

    热门问题