SIP参考指南 - 介绍

介绍

本文是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一样使用。

时间: 2024-12-17 18:29:05

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

POCO库中文编程参考指南(8)丰富的Socket编程

POCO库中文编程参考指南(8)丰富的Socket编程 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.com (# -> @) 日期:April 16th, 2012 1 POCO 中的 Socket POCO 中有 丰富的 Socket 封装.其继承关系如下: 本文暂且只介绍 StreamSocket.ServerSocket.DatagramSocket 2 Poco::Net::ServerSocket S

Nmap参考指南中文版

Nmap参考指南中文版 来源: http://www.nmap.com.cn/doc/manual.shtm 译注 该Nmap参考指南中文版由Fei Yang <[email protected]>和Lei Li<[email protected]> 从英文版本翻译而来. 我们希望这将使全世界使用中文的人们更了解Nmap,但我们不能保证该译本和官方的 英文版本一样完整,也不能保证同步更新. 它可以在Creative Commons Attribution License下被修改并重

Docker run 参考指南

Docker run参考指南 docker运行在一个独立的隔离的进程中. 当用户执行dockerrun,它将启动一个有着独立的文件系统,独立的网络和独立的进程树的进程. 基本的docker run命令的格式: docker run  [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...] [OPTIONS]分为两种: 1.对于用户独占性的设置: 前台.后台运行 容器定义 网络设定 容器在CPU和内存中的运行时间 运行权限和LXC配置 2.在操作者和开发者之间的共享设定,

PyQt 5.4参考指南 ---- 简介 (百度翻译)

PyQt 5.4参考指南 简介 这是5.4 pyqt5参考指南.pyqt5是一套绑定了 Digia 的 Python V5的Qt应用程序框架.QT是一个C++库和开发工具,包括平台 独立抽象的图形用户界面,网络,线程, 正则表达式,SQL数据库,XML,SVG,OpenGL,以及用户和应用 .pyqt5实现620以上的这些类作为一组Python 模块.pyqt5支持Windows,UNIX,Linux,Android,OS X和iOS平台. pyqt5组件 pyqt5包括许多不同的组件.首先有一

Java面试参考指南(二)

访问修饰符 对于基本的OOPS(面向对象)概念,请看Java面试参考指南的第一部分.访问修饰符规定了一个类如何访问另一个类及它的成员(包括方法和变量). Java中有下列访问修饰符: private:私有变量和方法(非外部类)只能被声明它们的类的实例所使用. default:类中的数据.方法和它本身能够被声明为默认default.类中所有default成员都可以被本包中的其它类所访问. protected:相比default有更高的访问权限.只有成员变量和方法能够被声明为protected.父类

【原创】PHP程序员进阶学习书籍参考指南

PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18 [初阶](基础知识及入门) 01. <PHP与MySQL程序设计(第4版)>  http://item.jd.com/10701892.html 02. <深入浅出MySQL 数据库开发 优化与管理维护 第2版> http://item.jd.com/11381295.html 03. <实战Nginx:取代Apache的高性能Web服务器> http://dwz.cn

POCO库中文编程参考指南(1)总览

POCO库中文编程参考指南(1)总览 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.com (# -> @) 日期:April 14th, 2012 1 What is POCO? POCO 是什么?这是我最常被人问到的.POCO 是 POrtable COmponents 的缩写,官方主页:POCOProject.org.是一个非常出色的 C++ 库,相当于 Java 的 Class Library..NET

POCO库中文编程参考指南(3)Poco::Net::Socket

POCO库中文编程参考指南(3)Poco::Net::Socket 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.com (# -> @) 日期:April 14th, 2012 1 SelectMode enum SelectMode /// The mode argument to poll() and select(). { SELECT_READ = 1, SELECT_WRITE = 2, SELECT

POCO库中文编程参考指南(4)Poco::Net::IPAddress

POCO库中文编程参考指南(4)Poco::Net::IPAddress 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.com (# -> @) 日期:April 14th, 2012 1 Poco::Net::IPAddress 地址最大长度,IPv4 是 in_addr 的长度,IPv6 是 in6_addr 的长度 enum { MAX_ADDRESS_LENGTH = #if defined(POCO_H