带有'cimport numpy`的Cython失败

时间:2017-06-21 15:15:08

标签: python python-3.x numpy cython

许多次问过类似的问题,但不幸的是,我再次遇到使用Cython和Numpy的问题。拿这个最小的例子(几乎遵循例子here):

# file test.pyx
import numpy as np
#cimport numpy as np

def func():
    print("hello")

我试图建立:

from distutils.core import setup
from Cython.Build import cythonize
import numpy as np
import os

os.environ["CC"] = "g++-7"

setup(
    ext_modules = cythonize("test.pyx", include_path = [np.get_include()])
)

此示例有效(python setup.py build_ext --inplace),直到我取消评论cimport ...行,之后我得到了众所周知的错误:

  

致命错误:numpy / arrayobject.h:没有这样的文件或目录

np.get_include()返回的路径确实有arrayobject.h标头,但在执行的实际g++命令中,包含目录缺少-I/...:< / p>

  

g ++ - 7 -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I / usr / local / include -I / usr / local / opt / openssl / include -I / usr / local / opt / sqlite / include -I / usr / local / Cellar / python3 / 3.6.1 / Frameworks / Python.framework / Versions / 3.6 / include / python3 .6m -c test.c -o build / temp.macosx-10.11-x86_64-3.6 / test.o

知道什么可能导致这个问题吗?

我在Mac OS上使用Python 3.6.1,所有内容(Cython,Numpy,..)都安装了pip3和Cython 0.25.2。

2 个答案:

答案 0 :(得分:2)

使用

代替简单的cythonize命令
ext_modules = cythonize((Extension("test", sources=["test.pyx"], include_dirs=[np.get_include()], ), ))

这里给include_dirs选项&#34;扩展&#34;而不是使用include_path和#34; cythonize&#34;。

答案 1 :(得分:0)

我的解决方法:

os.environ["C_INCLUDE_PATH"] = np.get_include()
setup(
    ext_modules = cythonize("test.pyx")
)