我目前正在研究一个项目,我不得不用Python包装C++类以便能够编写脚本程序。所以我的具体经验也涉及到在我们的程序中嵌入Python解释器。向Python公开一个C++ API
我试过的替代品:
Boost.Python的
我喜欢用Boost.Python的产生的更简洁的API,但事实上,它会要求用户安装做一个额外的依赖我们切换到SWIG。
痛饮
呷主要用于我们的优势是,它不要求最终用户安装使用的最终方案。
你以前做过什么,以及你曾经使用过什么?
我目前正在研究一个项目,我不得不用Python包装C++类以便能够编写脚本程序。所以我的具体经验也涉及到在我们的程序中嵌入Python解释器。向Python公开一个C++ API
我试过的替代品:
Boost.Python的
我喜欢用Boost.Python的产生的更简洁的API,但事实上,它会要求用户安装做一个额外的依赖我们切换到SWIG。
痛饮
呷主要用于我们的优势是,它不要求最终用户安装使用的最终方案。
你以前做过什么,以及你曾经使用过什么?
我用两个(同一项目):加速是较好的综合与STL,特别是C++异常。另外,它的内存管理机制(试图连接C++内存管理和Python GC)比SWIG更灵活。但是,SWIG具有多更好的文档,没有外部的依赖关系,如果你包裹在夜风库为Python你比那里得到一个Java/Perl的/ Ruby包装器,以及中途更多。
我不认为有明确的选择:对于较小的项目,我会再次使用Boost.Python,对于大型长寿命项目,SWIG的额外投资是值得的。
我建议SIP。由于以下原因,SIP比SWIG更好:
对于给定的一组文件,swig会生成比SIP更多的重复(开销)代码。 SIP通过使用可静态或动态链接的库文件来管理生成较少的重复(开销)代码。换句话说,SIP具有更好的可扩展性。 SIP的
执行时间比痛饮的要少得多。请参阅Python Wrapper Tools: A Performance Study。不幸的是,链接似乎中断我有一个可以根据要求共享的个人副本。
Boost :: Python的一大优点是,它允许在ipython shell中完成tab:您可以直接导入由Boost公开的C++类,或者将其子类化,并且从此它的行为就像纯Python类。
的缺点:它需要很长时间来安装和使用,所有的制表完成省时永远不会摊销;-(
升压所以我更喜欢痛饮:不花俏,但工作可靠经过一个简短的介绍性例子,
我有兴趣看到它,你可以发布它的地方,并链接到它?否则,我们可以安排你直接发送给我 – 2008-11-13 16:56:03
wayback机器有一个副本:http: //web.archive.org/web/20070703071726/http://people.web.psi.ch/geus/talks/europython2004_geus.pdf – 2008-11-14 00:00:18