在 ipython 中使用 Cython 包装 C++ 标准库
Posted
技术标签:
【中文标题】在 ipython 中使用 Cython 包装 C++ 标准库【英文标题】:Wrapping C++ Standard library with Cython in ipython 【发布时间】:2015-12-03 08:03:25 【问题描述】:根据 Cython 文档,我编写如下 cython 代码:
In [1]:%load_ext Cython
In [2]: %%cython
from libcpp.vector cimport vector
cdef vector[int] *vec_int = new vector[int](10)
ipython编译后出现如下错误:
Error compiling Cython file:
------------------------------------------------------------
...
from libcpp.vector cimport vector
cdef vector[int] *vec_int = new vector[int](10)
^
------------------------------------------------------------
/Users/m/.ipython/cython/_cython_magic_a72abb419ccf1b31db9a1851b522a4bf.pyx:3:32: Operation only allowed in c++
我的代码有什么问题?
【问题讨论】:
【参考方案1】:你需要通过特殊注释告诉cython
你正在编译C++
而不是C
# distutils: language = c++
在%%cython
块之后添加它可以解决您的问题。
【讨论】:
【参考方案2】:作为@romeric 答案的替代方案,documentation for ipython Cython magic 建议使用
%%cython --cplus
打开 C++ 模式。也可以通过在 IPython 控制台中运行 %%cython?
来访问该命令的帮助。
我个人认为使用 distutils 注释方法有很多话要说,因为它将语言与需要它的代码联系起来。
【讨论】:
以上是关于在 ipython 中使用 Cython 包装 C++ 标准库的主要内容,如果未能解决你的问题,请参考以下文章
Python Cookbook(第3版)中文版:15.10 用Cython包装C代码
包装采用 char** [in/out] 的 C 函数调用,以在 cython 中返回 python 列表
CompileError/LinkerError: "command 'gcc' failed with exit status 1" 是啥意思,在 IPython 中运行 %%c