介绍

本文是SIP4.18的参考指南。SIP是一种Python工具,用于自动生成Python与C、C++库的绑定。SIP最初是在1998年用PyQt开发的,用于Python与Qt GUI toolkit的绑定,但适用于生成任何C或C++库的绑定。

此版本SIP生成的绑定可用于Python 2.3以后的版本,包括Python 3.x。

还有许多其他类似的工具,例如SWIG。事实上,SIP如此名字是因为它源于一个小型的SWIG。但不像SWIG,SIP是特别设计于将Python与C/C++进行绑定的,它尽可能地集成更多C/C++的功能。

SIP官网:http://www.riverbankcomputing.com/software/sip
    在这里你总能找到最新的稳定版与最新版的文档。

SIP也可以从Mercurial库下载:http://www.riverbankcomputing.com/hg/sip.

许可

SIP许可类似于Python,也采用GPL协议(包括v2和v3)。如果你使用SIP,意味着你必须遵循GPL协议。

特征

SIP和它所生成的绑定拥有如下特征:

  • 加载迅速,内存占用低。
  • 自动转换标准的Python与C/C++数据类型。
  • 不同参数签名的函数和方法的重载
  • 访问C++类的protected方法
  • 能够定义一个继承于C++类型的Python子类,包括C++抽象类
  • Python子类可以实现__dtor__()方法来支持C++类的虚析构函数的调用。
  • 支持普通C++函数、类方法、静态类方法、虚类方法和抽象类方法。
  • 可以在Python中重新实现C++虚/抽象方法
  • 支持全局和Class变量
  • 支持全局和Class操作
  • 支持C++命名空间
  • 支持C++模板
  • 支持C++异常并转换为Python异常
  • 丰富的comparsion slots的自动生成
  • 支持deprecation警告
  • 支持定义C++类与相似的Python数据类型的映射,并自动调用
  • 支持自动利用任何可用的运行时类型信息,确保Python实例对象类型与对应的C++对象实例相匹配
  • 可以转换在类型与meta类型之间转换python对象,用以包装一个C/C++数据类型
  • 支持Python全局解释器锁,包括指示一个C++函数可能被阻塞,从而允许释放锁,让其他Python线程运行。
  • 支持将多个简单的或私有相关的模块合并为一个模块。
  • 支持C++实例所有权概念(即代码的哪些部分负责调用实例的析构函数),支持所有权在应用程序运行期间的改变。
  • 产生一个本身建立在其他C++类库之上的C++类库,允许不同的bindings之间代码集成与共享。
  • 支持用一套规范的文件,定义复杂的版本控制系统。允许控制C++类库的全生命周期,包括指定特定于平台的可选功能。
  • 支持自动生成PEP 484 类型hint stub文件,可以在指定的文件中包含说明文档,并允许外部工具提取和处理。
  • 可以在所有生成的源码中自动包含规范文件中所声明的版权和授权信息。
  • 可以在Python书写的构建系统中继承配置,编译并且安装你自己的绑定,从而无需担心平台的具体问题。
  • 使用distutils构建你的扩展支持。
  • SIP以及其生成的bindings,可以运行在UNIX,Linux,Windows,MacOS/X,Android and iOS中

SIP组件

SIP由一些不同的组件构成。

  • SIP代码生成器。它处理.sip规范文件并生成C或C++bindings。转换详情参考《使用SIP(Using SIP)》一节。
  • SIP头文件(sip.h)。它包含生成C与C++代码所需要的规范与数据结构。
  • SIP模块(sip.so或sip.pyd)。这是一个python扩展模块,自动由SIP生成的bindings导入,并为它们提供一些通用的工具函数。详情参考《应用程序Python API(Python API for Applications)》
  • SIP构建系统(sipconfig.py)。它是一个纯python模块,在SIP被配置并封装所有系统的相关信息时被创建。它包含目录名称、编译和链接标志以及版本号,它也包含一些Python类与函数。它帮助你为bindings编写配置脚本。
  • SIP distutils扩展(sipdistutils.py)。这是一个distutils扩展,可以用distutils构建你的扩展模块。用于替代手动编写SIP构建系统的配置脚本。它可以很简单的添加.sip文件到你需要构建和扩展的文件清单。详情参见《用distutils构建扩展(Building Your Extension with distutils)》。

SIP v5的准备

SIP指定文件的语法将在SIP v5中改变。SIP代码生成器的命令行选项也会改变。为了帮助用户管理过度,将采用以下方法

  • 尽可能把所有不兼容的变更,首先在SIP v4中实现。
  • 不兼容的变更实现之后,老的语法将被指定为deprecated(提示警告),但仍然在v4中支持。

Qt支持

SIP为创建基于Digia的Qt 工具包提供支持。

SIP代码生成器理解signal/slot类型安全的回调机制,该机制被Qt用于把对象连接到一起。它允许应用程序定义新的Python signals,并且允许python调用对象可以像slot一样使用。

Python - SIP参考指南 - 介绍的更多相关文章

  1. python之魔法方法介绍

    1.1. 简介 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加“魔法”的特殊方法. 它们经常是两个下划线包围来命名的(比如 __init__ , __lt__ ) ...

  2. PEP 8 - Python代码样式指南

    PEP 8 - Python代码样式指南 PEP: 8 标题: Python代码风格指南 作者: Guido van Rossum <python.org上的guido>,Barry Wa ...

  3. Python 编码风格指南

    原文:http://python.jobbole.com/84618/ 本文超出 PEP8 的范畴以涵盖我认为优秀的 Python 风格.本文虽然坚持己见,却不偏执.不仅仅涉及语法.模块布局等问题,同 ...

  4. (转)PEP 8——Python编码风格指南

    PEP 8——Python编码风格指南标签(空格分隔): Python PEP8 编码规范原文:https://lizhe2004.gitbooks.io/code-style-guideline-c ...

  5. Python开发人员指南

    本指南是一个全面的资源贡献 给Python的 -为新的和经验丰富的贡献者.这是 保持由维护的Python同一社区.我们欢迎您对Python的贡献! 快速参考 这是设置和添加补丁所需的基本步骤.了解基础 ...

  6. PEP8中文版 -- Python编码风格指南

    Python部落组织翻译, 禁止转载 目录      缩进      制表符还是空格?      行的最大长度      空行      源文件编码      导入      无法忍受的      其 ...

  7. Nmap参考指南中文版

    Nmap参考指南中文版 来源: http://www.nmap.com.cn/doc/manual.shtm 译注 该Nmap参考指南中文版由Fei Yang <fyang1024@gmail. ...

  8. PHP程序员进阶学习书籍参考指南

    PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18     [初阶](基础知识及入门)   01. <PHP与MySQL程序设计(第4版)> ...

  9. python Scrapy安装和介绍

    python Scrapy安装和介绍 Windows7下安装1.执行easy_install Scrapy Centos6.5下安装 1.库文件安装yum install libxslt-devel ...

随机推荐

  1. Angular学习笔记(一)

    本文为原创文章,转载请标明出处 目录 架构 模块 组件 模板 元数据 数据绑定 指令 服务 依赖注入 模板与数据绑定 1. 架构 模块 Angular 应用是模块化的,并且 Angular 有自己的模 ...

  2. php追加编译GD库

    一.准备工作. 安裝 GD 前需要安裝 jpegsrc.v7.tar.gz, libpng-1.6.17.tar.gz, zlib-1.2.8.tar.gz, freetype-2.5.5.tar.g ...

  3. mysqldumpslow -- 分析慢查询日志

    格式:mysqldumpslow [选项] 慢查询日志路径 选项: -s   排序方式,可选值有c(记录次数).t(查询时间).l(锁定时间).r(返回记录).a(平均) -t    显示的记录数 - ...

  4. c#使用GDI+简单绘图(二)

    // Create the in-memory bitmap where you will draw the image. // This bitmap is 300 pixels wide and ...

  5. 传统 HTML 表单数据的“整存整取”

    在日常开发中,涉及表单的处理司空见惯.过往,在取值和赋值的过程中,借助 jQuery 常常只是逐个控件进行操作,可惜这样开发效率并不高.那么能不能批量获取整个表单的值呢,以及批量为表单赋值. 一.取值 ...

  6. OC实现同步访问属性

    有时候,我们在开发过程中需要对属性的访问进行同步操作,这种属性需要做成原子的,用atomic来修饰属性,即可实现这一点. 如果我们想自己实现,可以按照下面方式写代码: SFPerson.h #impo ...

  7. canvas图表详解系列(4):动态散点图

    本章建议学习时间4小时 学习方式:详细阅读,并手动实现相关代码(如果没有canvas基础,需要先学习前面的canvas基础笔记) 学习目标:此教程将教会大家如何使用canvas绘制各种图表,详细分解步 ...

  8. win10 UWP Hmac

    HMAC是密钥相关的哈希运算消息认证码,输入密钥和信息. 在uwp,Hmac在很多网络使用,我最近写qiniu SDK,把原来C#改为UWP,需要使用HMAC. 上传文件 <form metho ...

  9. MySQL索引语法+使用场景

    MySQL索引语法 建表时添加索引 建表同时建立单索引 CREATE TABLE t_user1(id INT , userName VARCHAR(20), PASSWORD VARCHAR(20) ...

  10. ubuntu下MySQL修改root密码的多种方法,phpmyadmin空密码无法登陆的解决方法

    phpmyadmin是默认不允许使用空密码的,所以若是在安装时没有设置密码,在登陆phpmyadmin时是个很头疼的问题 方法1是修改phpmyadmin的配置文件,这里不做推荐.. 方法2: php ...