Cython 导入工作一次 - 然后给出 gcc.bat 错误
Posted
技术标签:
【中文标题】Cython 导入工作一次 - 然后给出 gcc.bat 错误【英文标题】:Cython import works once - and then gives a gcc.bat error 【发布时间】:2015-03-04 18:16:03 【问题描述】:我正在 64 位 Windows 8 机器上用 Anaconda/Spyder 编写 Python 程序。我得到了 gcc.bat 的所有已知问题(“gcc.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
文件来调用此函数:
import os
import numpy as np
import pyximport
os.environ['CPATH'] = np.get_include()
mingw_setup_args = 'options': 'build_ext': 'compiler': 'mingw32'
pyximport.install(setup_args=mingw_setup_args)
import testFunc
x = testFunc.funcMatUtility(np.array([0.0,1.0,2.0]),np.array([0.0,1.0,2.0,3.0]))
如果没有os.environ['CPATH'] = np.get_include()
行,我会立即收到 gcc.bat 错误消息。如果没有 install()
中的设置参数,我会收到另一条错误消息:Unable to find vcvarsall.bat
。
因此,通过这些行,我可以编译我的 Cython 代码,这表明我首先需要在我的 Windows 机器上运行 Cython
编译器。然而,问题是我只能这样做一次。如果想再次导入它,例如因为我仍在开发我的代码并且我只进行了一次测试运行,我会再次收到 gcc.bat 错误消息 (gcc.bat failed with exit status 1
),除非我关闭并重新打开 Spyder。我只使用import
语句尝试了第二次导入(即不再导入pyximport
),但无济于事。我只能编译一次 Cython 代码可能是什么原因?
【问题讨论】:
【参考方案1】:我想我找到了问题(因此找到了解决方案):我需要告诉编译器我正在使用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 中有效,在重复运行中也是如此。
【讨论】:
以上是关于Cython 导入工作一次 - 然后给出 gcc.bat 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 gcc 编译 cython:#include "ios" 中没有这样的文件或目录