SamsonWang
V2EX  ›  C

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

  •  
  •   SamsonWang · Nov 12, 2018 · 4435 views
    This topic created in 2924 days ago, the information mentioned may be changed or developed.

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

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

    1. boost.python
    2. pybind11

    先谢谢大家~

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

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

    C++程序中调用命令行的思路,交给让操作系统执行,应该是可行的。
    thedrwu
    thedrwu
    Nov 13, 2018 via Android
    3
    用了一大圈,还是 swig 最好用。
    heliumhgy
    heliumhgy
    Nov 13, 2018 via Android
    4
    裸写 C 扩展。你提到的那俩货性能开销蛮大的。
    htfy96
    htfy96
    Nov 13, 2018
    5
    FFI 一直都是大坑。如果没有超高性能要求的话可以包装成 RPC,通过 domain socket/TCP 通信,优点是解耦比较彻底
    JerryV2
    JerryV2
    Nov 13, 2018
    6
    @heliumhgy
    对,使用调用 C API,自己简单包装一下,并不复杂
    Wicked
    Wicked
    Nov 13, 2018 via iPhone
    7
    搜索“ python c 扩展”,很简单的
    dychenyi
    dychenyi
    Nov 13, 2018
    8
    swig, cython
    initialdp
    initialdp
    Nov 13, 2018
    9
    ctypes 挺好用
    wutiantong
    wutiantong
    Nov 13, 2018
    10
    @heliumhgy 我最近用了一点儿 pybind11,不太明白你说的“性能开销蛮大的”具体是指什么?
    chenstack
    chenstack
    Nov 13, 2018
    11
    我推荐用 pybind11,使用上对 C++的类友好,用着挺舒服的
    Arnie97
    Arnie97
    Nov 14, 2018 via Android
    12
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1628 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 16:20 · PVG 00:20 · LAX 08:20 · JFK 11:20
    ♥ Do have faith in what you're doing.