许多次问过类似的问题,但不幸的是,我再次遇到使用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。
答案 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")
)