在 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

如何在 cython 模块中使用外部包装类?

Cython:从 C 程序调用 Python 代码

如何在 python 包装中使用 unicode 字符串用于带有 cython 的 c++ 类?