【问题标题】:Cython+NumPy - compiler not using numpy.pydCython+NumPy - 编译器不使用 numpy.pyd
【发布时间】:2014-04-18 00:23:45
【问题描述】:

我有一个使用 numpy 的代码,我想使用 Cython 编译它。我添加了 cimport 指令:

import numpy as np
cimport numpy as np

我在 Windows 7 上,使用 gcc (MinGW) 作为编译器的 distutils 进行编译。当我尝试编译它时会产生错误。这是错误:

ssepMC.c:346:31: fatal error: numpy/arrayobject.h: No such file or directory
 #include "numpy/arrayobject.h"
                               ^
compilation terminated.
error: command 'gcc' failed with exit status 1

我相信这个错误的发生是因为编译器试图编译 numpy 包。但这是一个不必要的步骤,因为 numpy 的编译版本存在于 Cython 下

C:\Python27\Lib\site-packages\Cython\Includes\numpy\numpy.pxd

那么问题来了:如何让编译器使用编译后的numpy版本?

提前致谢。

【问题讨论】:

  • 这看起来像是 other question 的副本。
  • 感谢@IanH,这似乎解决了它。但是,如果有办法不编译 numpy,而是使用预编译版本,那就太酷了
  • 我对 NumPy 的内部结构不够熟悉,无法说出这是重新编译 NumPy 的哪些位。我怀疑这将是一个问题,但我可能是错的。但实际上,如果您不想处理这种依赖关系,memory views 是最简单的方法。
  • 我去看看。再次感谢:-)

标签: python gcc numpy cython


【解决方案1】:

如其他地方所述,您需要将gcc 指向numpy/arrayobject.h,您可以通过将include_dirs 设置为[np.get_include()] 来做到这一点。

注意 - 这不是“重新编译”numpy,这是使用 numpy arrayheader 文件中的指令来指导 gcc 如何编译您的代码。

from Cython.Build import cythonize
import numpy as np

ext_modules = [Extension("hello", ["hello.pyx"], include_dirs=[np.get_include()])]

setup(
  ext_modules = cythonize(extensions)
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多