V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SamsonWang
V2EX  ›  C

求推荐 C++中调用 Python 的方案

  •  
  •   SamsonWang · 2018-11-12 23:58:22 +08:00 · 3133 次点击
    这是一个创建于 1990 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我需要在 c++中调用 python,目前( 2018 年 11 月)比较主流的方案有哪些呢?请结合自己的实践给出推荐理由。

    我目前查资料找到的可能备选方案:

    1. boost.python
    2. pybind11

    先谢谢大家~

    第 1 条附言  ·  2018-11-13 19:08:45 +08:00
    我正在维护一个桌面工具软件,这个软件的主框架是用 C++和 Qt 写的。
    软件有一个插件系统,一般来说插件也会用 C++来写。
    其中一个插件的功能是作为中间层去调用 python 脚本,这样就可以用 python 为这个桌面软件编写插件了。

    整体代码的年代都比较久远了,之前的方案是使用 boost.python 做的,我希望能找到一个功能性和轻量级之间的平衡点。
    12 条回复    2018-11-14 01:16:56 +08:00
    scriptB0y
        1
    scriptB0y  
       2018-11-13 01:09:58 +08:00
    能说说你的需求吗? 我觉得一般在 C++ 中需要脚本语言的话,lua 是比较合适的。
    anonymous256
        2
    anonymous256  
       2018-11-13 01:13:46 +08:00 via Android   ❤️ 1
    https://blog.csdn.net/VonSdite/article/details/81295056

    C++程序中调用命令行的思路,交给让操作系统执行,应该是可行的。
    thedrwu
        3
    thedrwu  
       2018-11-13 01:14:44 +08:00 via Android
    用了一大圈,还是 swig 最好用。
    heliumhgy
        4
    heliumhgy  
       2018-11-13 01:37:48 +08:00 via Android
    裸写 C 扩展。你提到的那俩货性能开销蛮大的。
    htfy96
        5
    htfy96  
       2018-11-13 02:14:01 +08:00
    FFI 一直都是大坑。如果没有超高性能要求的话可以包装成 RPC,通过 domain socket/TCP 通信,优点是解耦比较彻底
    JerryV2
        6
    JerryV2  
       2018-11-13 08:19:58 +08:00
    @heliumhgy
    对,使用调用 C API,自己简单包装一下,并不复杂
    Wicked
        7
    Wicked  
       2018-11-13 08:22:01 +08:00 via iPhone
    搜索“ python c 扩展”,很简单的
    dychenyi
        8
    dychenyi  
       2018-11-13 09:11:49 +08:00
    swig, cython
    initialdp
        9
    initialdp  
       2018-11-13 09:25:53 +08:00
    ctypes 挺好用
    wutiantong
        10
    wutiantong  
       2018-11-13 11:37:54 +08:00
    @heliumhgy 我最近用了一点儿 pybind11,不太明白你说的“性能开销蛮大的”具体是指什么?
    chenstack
        11
    chenstack  
       2018-11-13 16:43:28 +08:00
    我推荐用 pybind11,使用上对 C++的类友好,用着挺舒服的
    Arnie97
        12
    Arnie97  
       2018-11-14 01:16:56 +08:00 via Android
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4012 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:18 · PVG 18:18 · LAX 03:18 · JFK 06:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.