Python - SIP參考指南 - 介紹

介紹

本文是SIP4.18的參考指南武花。SIP是一種Python工具振湾,用于自動(dòng)生成Python與C、C++庫的綁定。SIP最初是在1998年用PyQt開發(fā)的锨匆,用于Python與Qt GUI toolkit的綁定,但適用于生成任何C或C++庫的綁定。

此版本SIP生成的綁定可用于Python 2.3以后的版本恐锣,包括Python 3.x茅主。

還有許多其他類似的工具,例如SWIG土榴。事實(shí)上诀姚,SIP如此名字是因?yàn)樗从谝粋€(gè)小型的SWIG。但不像SWIG玷禽,SIP是特別設(shè)計(jì)于將Python與C/C++進(jìn)行綁定的赫段,它盡可能地集成更多C/C++的功能。

SIP官網(wǎng):http://www.riverbankcomputing.com/software/sip

在這里你總能找到最新的穩(wěn)定版與最新版的文檔矢赁。

SIP也可以從Mercurial庫下載:http://www.riverbankcomputing.com/hg/sip.

許可

SIP許可類似于Python糯笙,也采用GPL協(xié)議(包括v2和v3)。如果你使用SIP撩银,意味著你必須遵循GPL協(xié)議给涕。

特征

SIP和它所生成的綁定擁有如下特征:

加載迅速,內(nèi)存占用低额获。

自動(dòng)轉(zhuǎn)換標(biāo)準(zhǔn)的Python與C/C++數(shù)據(jù)類型够庙。

不同參數(shù)簽名的函數(shù)和方法的重載

訪問C++類的protected方法

能夠定義一個(gè)繼承于C++類型的Python子類,包括C++抽象類

Python子類可以實(shí)現(xiàn)__dtor__()方法來支持C++類的虛析構(gòu)函數(shù)的調(diào)用咪啡。

支持普通C++函數(shù)首启、類方法、靜態(tài)類方法撤摸、虛類方法和抽象類方法毅桃。

可以在Python中重新實(shí)現(xiàn)C++虛/抽象方法

支持全局和Class變量

支持全局和Class操作

支持C++命名空間

支持C++模板

支持C++異常并轉(zhuǎn)換為Python異常

豐富的comparsion slots的自動(dòng)生成

支持deprecation警告

支持定義C++類與相似的Python數(shù)據(jù)類型的映射,并自動(dòng)調(diào)用

支持自動(dòng)利用任何可用的運(yùn)行時(shí)類型信息准夷,確保Python實(shí)例對(duì)象類型與對(duì)應(yīng)的C++對(duì)象實(shí)例相匹配

可以轉(zhuǎn)換在類型與meta類型之間轉(zhuǎn)換python對(duì)象钥飞,用以包裝一個(gè)C/C++數(shù)據(jù)類型

支持Python全局解釋器鎖,包括指示一個(gè)C++函數(shù)可能被阻塞衫嵌,從而允許釋放鎖读宙,讓其他Python線程運(yùn)行。

支持將多個(gè)簡(jiǎn)單的或私有相關(guān)的模塊合并為一個(gè)模塊楔绞。

支持C++實(shí)例所有權(quán)概念(即代碼的哪些部分負(fù)責(zé)調(diào)用實(shí)例的析構(gòu)函數(shù))结闸,支持所有權(quán)在應(yīng)用程序運(yùn)行期間的改變。

產(chǎn)生一個(gè)本身建立在其他C++類庫之上的C++類庫酒朵,允許不同的bindings之間代碼集成與共享桦锄。

支持用一套規(guī)范的文件,定義復(fù)雜的版本控制系統(tǒng)蔫耽。允許控制C++類庫的全生命周期结耀,包括指定特定于平臺(tái)的可選功能。

支持自動(dòng)生成PEP 484 類型hint stub文件,可以在指定的文件中包含說明文檔图甜,并允許外部工具提取和處理碍粥。

可以在所有生成的源碼中自動(dòng)包含規(guī)范文件中所聲明的版權(quán)和授權(quán)信息。

可以在Python書寫的構(gòu)建系統(tǒng)中繼承配置黑毅,編譯并且安裝你自己的綁定嚼摩,從而無需擔(dān)心平臺(tái)的具體問題。

使用distutils構(gòu)建你的擴(kuò)展支持博肋。

SIP以及其生成的bindings低斋,可以運(yùn)行在UNIX,Linux匪凡,Windows膊畴,MacOS/X,Android and iOS中

SIP組件

SIP由一些不同的組件構(gòu)成病游。

SIP代碼生成器唇跨。它處理.sip規(guī)范文件并生成C或C++bindings。轉(zhuǎn)換詳情參考《使用SIP(Using SIP)》一節(jié)衬衬。

SIP頭文件(sip.h)买猖。它包含生成C與C++代碼所需要的規(guī)范與數(shù)據(jù)結(jié)構(gòu)。

SIP模塊(sip.so或sip.pyd)滋尉。這是一個(gè)python擴(kuò)展模塊玉控,自動(dòng)由SIP生成的bindings導(dǎo)入,并為它們提供一些通用的工具函數(shù)狮惜。詳情參考《應(yīng)用程序Python API(Python API for Applications)》

SIP構(gòu)建系統(tǒng)(sipconfig.py)高诺。它是一個(gè)純python模塊,在SIP被配置并封裝所有系統(tǒng)的相關(guān)信息時(shí)被創(chuàng)建碾篡。它包含目錄名稱虱而、編譯和鏈接標(biāo)志以及版本號(hào),它也包含一些Python類與函數(shù)开泽。它幫助你為bindings編寫配置腳本牡拇。

SIP distutils擴(kuò)展(sipdistutils.py)。這是一個(gè)distutils擴(kuò)展穆律,可以用distutils構(gòu)建你的擴(kuò)展模塊惠呼。用于替代手動(dòng)編寫SIP構(gòu)建系統(tǒng)的配置腳本。它可以很簡(jiǎn)單的添加.sip文件到你需要構(gòu)建和擴(kuò)展的文件清單峦耘。詳情參見《用distutils構(gòu)建擴(kuò)展(Building Your Extension with distutils)》罢杉。

SIP v5的準(zhǔn)備

SIP指定文件的語法將在SIP v5中改變。SIP代碼生成器的命令行選項(xiàng)也會(huì)改變贡歧。為了幫助用戶管理過度,將采用以下方法

盡可能把所有不兼容的變更,首先在SIP v4中實(shí)現(xiàn)利朵。

不兼容的變更實(shí)現(xiàn)之后律想,老的語法將被指定為deprecated(提示警告),但仍然在v4中支持绍弟。

Qt支持

SIP為創(chuàng)建基于Digia的Qt 工具包提供支持技即。

SIP代碼生成器理解signal/slot類型安全的回調(diào)機(jī)制,該機(jī)制被Qt用于把對(duì)象連接到一起樟遣。它允許應(yīng)用程序定義新的Python signals而叼,并且允許python調(diào)用對(duì)象可以像slot一樣使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豹悬,一起剝皮案震驚了整個(gè)濱河市葵陵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞻佛,老刑警劉巖脱篙,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伤柄,居然都是意外死亡绊困,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門适刀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秤朗,“玉大人,你說我怎么就攤上這事笔喉∪∈樱” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵然遏,是天一觀的道長贫途。 經(jīng)常有香客問我,道長待侵,這世上最難降的妖魔是什么丢早? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮秧倾,結(jié)果婚禮上怨酝,老公的妹妹穿的比我還像新娘。我一直安慰自己那先,他們只是感情好农猬,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著售淡,像睡著了一般斤葱。 火紅的嫁衣襯著肌膚如雪慷垮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天揍堕,我揣著相機(jī)與錄音料身,去河邊找鬼。 笑死衩茸,一個(gè)胖子當(dāng)著我的面吹牛芹血,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播楞慈,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼幔烛,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了囊蓝?” 一聲冷哼從身側(cè)響起饿悬,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慎颗,沒想到半個(gè)月后乡恕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俯萎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年傲宜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夫啊。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡函卒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撇眯,到底是詐尸還是另有隱情报嵌,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布熊榛,位于F島的核電站锚国,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏玄坦。R本人自食惡果不足惜血筑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煎楣。 院中可真熱鬧豺总,春花似錦、人聲如沸择懂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽困曙。三九已至表伦,卻和暖如春谦去,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绑榴。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工哪轿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翔怎。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像杨耙,于是被迫代替她去往敵國和親赤套。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理珊膜,服務(wù)發(fā)現(xiàn)容握,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,441評(píng)論 6 428
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富车柠,涉及面非常廣剔氏。awesome-p...
    若與閱讀 18,615評(píng)論 4 418
  • 環(huán)境管理管理Python版本和環(huán)境的工具。p–非常簡(jiǎn)單的交互式python版本管理工具竹祷。pyenv–簡(jiǎn)單的Pyth...
    MrHamster閱讀 3,783評(píng)論 1 61
  • ngrok 是用go語言實(shí)現(xiàn)的谈跛,編譯過程碰到不少坑 主要碰到的坑就是依賴錯(cuò)誤,以及依賴的包被偉大的GFW給擋住了塑陵。...
    youkale閱讀 6,008評(píng)論 0 1