Python - 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一樣使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM