`
gaofen100
  • 浏览: 1243343 次
文章分类
社区版块
存档分类
最新评论

Shiboken学习小结

 
阅读更多

从PySide一换成shiboken就开始关注它,可是由于对python的C调用不熟,对cmake构建系统不熟,从尝试了解shiboken到现在已经10个月过去了,还是一直没什么进展。但必须学习并整理一下了:

什么是Shiboken

Setanta 解释说:Shiboken是一个为C/C++库生成CPython绑定代码的生成器,除此之外,没有任何附加的含义。 原文如下:

  • Before going on with this, allow me to explain that Shiboken means absolutely nothing. Not buddhist void, I just mean that the word Shiboken has no meaning attached to it. Except, of course, “generator of CPython based binding code for C/C++ libraries”.

文档的第一行是这么告诉的我们:Shiboken 是 Generator Runner 的一个插件(前端),它使用CPython代码为C++库生成绑定。 原文如下:

  • Shiboken is a plugin (front-end) for Generator Runner. It generates bindings for C++ libraries using CPython source code.

为了了解Shiboken,我们需要先看看 Generator Runner:

Generator Runner

  • GeneratorRunner 是为了便于为C++和Qt的库开发语言绑定而创建的一个工具。
  • 它提供了一个框架来使得这个过程能够最大可能地自动化:
    • 使用ApiExtractor提来提取C++头文件中的信息
    • 通过相应的前端(用户可以自己提供)来生成某种目标语言的绑定

要想为生成C++库生成绑定,我们需要

从C++库的头文件中提取信息

ApiExtractor

控制提取(修改、重命名)哪些信息

通过 typesystem 文件

信息提取之后,我们理论上可以为各种高层的语言提供绑定(只要有相应的前端存在)。

为CPython生成绑定

shiboken

为要绑定的库生成文档

DocGenerator

为... 生成绑定

...

Generator Runner 本身比较简单,它的工作都是通过ApiExtractor和前端(比如此处的Shiboken) 来完成的。

  • Generator Runner 定义了一个前端的接口类 classGenerator;

  • 每个前端插件(比如Shiboken)只需要提供了一个函数voidgetGenerators(GeneratorList*list) 来返回包含Generator的一个链表(QLinkedList)

  • 在调用 Generator Runner 时,通过命令行指定使用哪一个前端
generatorrunner --generator-set=shiboken

再看Shiboken

当编译或安装Shiboken时,我们会注意到和shiboken名字相关的有3个文件:

shiboken_generator(.dll/.so/...)

这个就是前面一直在提的插件(前端)

shiboken-python*(.dll/.so/...)

最终生成的代码需要依赖这个来运行

shiboken(.exe)

这只是一个外壳,就是generatorrunner--generator-set=shiboken

插件位置

  • 在命令行的 --generator-set 中我们可以指定插件的全路径。
  • 如果不是全路径(比如指定shiboken),generatorrunner 先合成文件名(shiboken_generator.dll),再去以下路径搜索
    • 编译时指定的插件目录
    • QCoreApplication::libraryPaths()返回的路径

参考

分享到:
评论

相关推荐

    shiboken6.abi3.dll文件

    shiboken6.abi3.dll文件

    PytSide2-and-shiboken2-5.15.2.1-5.15.2.zip

    pip install shiboken2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64.whl pip install PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64.whl 或者 pip install shiboken2...

    shiboken-1.2.4-2.el7.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    shiboken25.15.2.15.15.2cp35.cp36.cp37.cp38.cp39.cp311nonewin_amd64.whl

    shiboken25.15.2.15.15.2cp35.cp36.cp37.cp38.cp39.cp311nonewin_amd64.whl

    PySide6-6.2.3-6.2.3-cp36.cp37.cp38.cp39.cp310-none-win_amd64

    pysides 在线下载较慢,共享 需要安装shiboken6 python -m pip install shiboken6==shiboken6-6.2.3

    shiboken-libs-1.2.4-2.el7.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    shiboken-devel-1.2.4-2.el7.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    samplebinding.rar

    这个压缩包提供了一个实际的案例,对于学习如何将C++库集成到Python应用中是非常有价值的。它可以帮助开发者理解Shiboken和PySide的工作原理,提升跨语言编程的能力。通过深入研究这个示例,不仅可以掌握C++到Python...

    makelib2.rar

    总之,"makelib2.rar"提供的内容涵盖了C++、Qt库、Shiboken、PySide和Python的结合使用,对于希望在Python中利用Qt界面的开发者来说是一份宝贵的学习资料。通过这个项目,你可以了解和实践如何在Python中无缝地调用...

    pyside-pyside-setup

    相同的setup.py脚本用于构建项目的所有组件: shiboken6(支持的Python模块) shiboken6-generator(绑定生成可执行文件) PySide6 最好使用Qt(构建)环境来自动选择关联的qmake ,但可选地,如果qmake和cmake不在...

    PyQtRPT:Pyside QtRPT-开源

    用于QtRPT的Pyside QtRPT Python绑定(PySide Shiboken)QtRPT报告引擎Python报告许可证与QtRPT兼容的LGPL3(请参阅许可证)“”“ QtRPT是用C ++ QtToolkit编写的易于使用的打印报告引擎。它允许将多个报告合并为一...

    Pyside2 aarch64,Python3.8

    适用于linux系统(ubuntu)等,架构aarch64,直接使用Pyside2 代替Qt,做项目时候直接安装编译好的文件即可,先安装shiboken的两个文件,最后安装Pyside2. 一般Qt的安装很不容易安装成功,尤其是对于ubuntu系统,...

    Pyside2 aarch64,Python3.6

    适用于linux系统(ubuntu)等,架构aarch64,直接使用Pyside2 代替Qt,做项目时候直接安装编译好的文件即可,先安装shiboken的两个文件,最后安装Pyside2. 一般Qt的安装很不容易安装成功,尤其是对于ubuntu系统,...

    PythonDemo.rar

    2. **PyQt/PySide集成**:在Python中,开发者会使用`uic`模块(对于PyQt)或`shiboken2`和`PyQt5.QtWidgets`(对于PySide)来加载.ui文件,并将其转换为可执行的Python类。这样,可以在Python脚本中实例化这些类,...

    Pyside2 aarch64,Python3.7

    适用于linux系统(ubuntu)等,架构aarch64,直接使用Pyside2 代替Qt,做项目时候直接安装编译好的文件即可,先安装shiboken的两个文件,最后安装Pyside2. 一般Qt的安装很不容易安装成功,尤其是对于ubuntu系统,...

    PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl

    PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl

    PyQt5-5.15.0-5.15.0-cp35.cp36.cp37.cp38-none-win_amd64.whl

    PyQt5-5.12.1-5.12.2-cp35.cp36.cp37.cp38-none-win_amd64.whl

    pyside2-setup:注意力

    Qt对于Python Qt For Python是,可访问完整的Qt 5.x框架以及用于快速生成任何C ++库绑定的生成器工具。... shiboken2是用于构建绑定的生成器。 有关详细信息,请参见README.pyside2.md和README.shiboken2.md。

    PyQtSerialPort:PySide QtSerialPort-开源

    PySide QtSerialPort绑定Shiboken LGPL3 QtSerialPort是Qt的正式组成部分(http://www.qt.io)。 信息链接:http://wiki.qt.io/QtSerialPort

    Import-Browser:使用Python PyQt5编写的Internet浏览器

    适用于Python的Qt Qt for Python提供了Qt的官方Python绑定,并具有两个主要组件: PySide6,以便您可以在Python应用程序中使用Qt6 API,还可以使用Shiboken6(一个绑定生成器工具,可以将C ++项目暴露给Python),...

Global site tag (gtag.js) - Google Analytics