一个作者能否编写一个库API–;一个可在Python之外访问–;使用Cython?
我知道Cython的目的是创建Python扩展模块,但是用Cython编译的库可以由非Python程序加载吗?如果没有,原因是什么?我怀疑您是否可以在非python程序上直接加载它们;看看最简单的Cython脚本生成的C代码,很明显,您需要所有的Python脚手架才能使其工作。也就是说,你可以间接地从C++中做。在C++中,我使用Python解释器,并加载一些模块和脚本。这可能看起来很复杂,但是只要你建立了适当的粘贴代码(参见),你就可以快速使用已经在Python中编写的C++扩展(参见)。 这种方法的缺点是,您实际上是在加载一个完整的Python解释器,以便能够使用一些扩展。这对我来说不是问题,因为我已经有了python扩展,并将python嵌入到我的应用程序中以提供基本的脚本能力,但我不会使用这种方法来编写新的库 外部有一个作者能否编写一个库API–;一个可在Python之外访问–;使用Cython?,python,c++,c,api,cython,Python,C++,C,Api,Cython,我知道Cython的目的是创建Python扩展模块,但是用Cython编译的库可以由非Python程序加载吗?如果没有,原因是什么?我怀疑您是否可以在非python程序上直接加载它们;看看最简单的Cython脚本生成的C代码,很明显,您需要所有的Python脚手架才能使其工作。也就是说,你可以间接地从C++中做。在C++中,我使用Python解释器,并加载一些模块和脚本。这可能看起来很复杂,但是只要你建立了适当的粘贴代码(参见),你就可以快速使用已经在Python中编写的C++扩展(参见)。 这
cdef
'ed Cython结构可用:
cdef公共结构车辆:
整数速度
浮力
cdef api无效激活(车辆*v):
如果v.speed>=88和v.power>=1.21:
打印“实现时间旅行”
这些方法中的每一种都将指示Cython编译器生成一个头文件(“.h”),然后您可以将其与正交C/C++项目集成
一个cdefpublic
声明产生一个名为modulename.h
的文件;使用此文件中的结构需要链接已编译的Cython扩展模块
api
声明(如果您愿意,可以与cdef public
同时使用)生成modulename_api.h
文件;使用基于api
的头文件的代码不需要链接到扩展模块,但需要调用cdef
'd函数import\u modulename()
,然后才能使用任何api代码(NumPy的Cython用户会采用这种策略)
以我个人的经验,只要结构布局与消费代码很好地吻合,以这种方式公开并随后使用Encythond结构作为外部API几乎不费吹灰之力,你愿意在C/C++代码中手动管理GIL以使其正常工作。很大程度上取决于所讨论的库使用的Cython功能。你为什么要首先这样做?用Python构建库?我感到惊讶的是,事实上这并不常见……对,谷歌正在寻找几种可用的实用工具,以便在C/C++程序中嵌入Python。Boost不是唯一一个。。。