给定一个docprep.pyx简单的文件
from spacy.structs cimport TokenC
print("loading")
Run Code Online (Sandbox Code Playgroud)
并试图通过
cythonize -3 -i docprep.pyx
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息
docprep.c:613:10: fatal error: ios: No such file or directory
#include "ios"
^~~~~
compilation terminated
Run Code Online (Sandbox Code Playgroud)
从路径中可以看出,该系统安装了 Python 3.7 的 Anaconda。numpy,spacy并且cython都是通过conda.
在我的情况下,它使用@mountrix 提示工作,只需将其添加language="c++"到您的 setup.py 中,例如:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy
extensions = [
Extension("processing_module", sources=["processing_module.pyx"], include_dirs=[numpy.get_include()], extra_compile_args=["-O3"], language="c++")
]
setup(
name="processing_module",
ext_modules = cythonize(extensions),
)
Run Code Online (Sandbox Code Playgroud)
<ios>是一个 c++ 头文件。错误消息显示您尝试将 C++ 代码编译为 C 代码。
默认情况下,Cython 将生成一个扩展名为 的文件,*.c稍后编译器会将其解释为 C 代码。
Cython 还可以为 C++ 生成具有正确文件扩展名的文件,即*.cpp. 并且有多种方法可以触发这种行为:
# distutils: language = c++在pyx-file的开头添加。language="c++"到-file 中的Extension定义setup.py。cython选项--cplus。%%cython魔法-+,即%%cython -+。pyximport,请参阅此 SO-question。实际上,因为cythonize没有命令行选项来触发 c++-generation,因此第一个选项看起来是最好的方法:
# distutils: language = c++
from spacy.structs cimport TokenC
print("loading")
Run Code Online (Sandbox Code Playgroud)
问题是spacy/structs.pxd 使用 c++-constructs,例如向量或任何其他 cimported from libcpp:
...
from libcpp.vector cimport vector
...
Run Code Online (Sandbox Code Playgroud)
因此,构建还需要 c++-libraries/headers。
| 归档时间: |
|
| 查看次数: |
3996 次 |
| 最近记录: |