Python SIP使用总结(WinLinux通用)
From: http://topic.csdn.net/u/20120324/22/cd8796f8-c601-492c-992d-3d70d58ba51b.html?07033688857013248#replyachor
本文原先發表與我的博客。這是我做圖像處理的時候摸索到的,現分享給大家。在用Python+OpenCV做影像分割、識別以及變換檢測時,有時候會遇到處理速度瓶頸,于是想到用C++重寫一些模塊。在觀察各個Python調用C++的方法中,在網上看了許多評價和介紹,最后選擇了SIP作為工具。
? 本著分享的精神,現將使用的方法和在使用中遇到的問題總結出來,供大家參考。歡迎拍磚。本文也參加CSDN技術大分享活動,歡迎大家捧場。
? 如前所述,Python中使用C/C++模塊有許多工具,大名鼎鼎的有SWIG(英文意思為:豪飲)、SIP(英文意思為:啜飲,小口的喝),還有boost.python等。其中SIP是從SWIG發展而來,專為Python調用C/C++模塊使用的(看SIP的命名就能看出來,很有意思的)。
? 或許有人問為什么不用ctypes模塊,原因是使用SIP無需編寫特定格式的C/C++文件。需要調用的C/C++源代碼文件,只是最簡單的函數即可。若說SIP有什么需要學習的,那就是sip文件(下文中會介紹到)的編寫。不過sip文件是基于C/C++的頭文件的,學起來也比較簡單。
? SIP的使用方法,在官網的SIP Reference Guide中有介紹,不過那是針對至少有點經驗的人員,對初學者來說,想十分鐘快速上手還是有點難度的。這里就介紹下本人在使用SIP總結的需要注意的地方。
??前提:本機上要裝了Python、GCC(Windows下可以用MinGW)。并把python.exe和MinGW下的bin文件路徑添加到環境變量中。
第一部分:安裝SIP
??Windows:
? 將Riverbank上的sip的zip格式的代碼包下載,將其解壓到C:\Python27中,那么現在sip的文件夾路徑為C:\Python27\sip-4.13.2\sip-4.13.2(你也可以將其解壓到任何一個文件夾中,但這里為了敘述方便,就解壓到我電腦上的Python的文件夾中)。
? 打開Windows的cmd命令行,輸如cd C:\Python27\sip-4.13.2\sip-4.13.2跳轉到sip文件夾下。
? 輸入python configure.py --platform win32-g++。進行配置
? 再完成上一步后,輸入mingw32-make,接著輸入mingw32-make install。若無意外,SIP就安裝完成了。
??常見問題:
? 若是你的電腦上之前安裝了Eclipse等其他軟件,而將mingw32-make改成了make,那么就要將上面的mingw32-make命令改為make來使用。
? 有個朋友說他按上面的方法使用make總是報錯,仔細一問,才發現他的電腦上安裝了Embacardero的RAD開發工具,也就是熟知的Delphi和C++ Builder的開發工具。在安裝了這個工具后,在命令行中輸入make,使用的總是Embacardero的C++ Builder的make。根據親測,即使在配置的時候,使用python configure.py --platform win32-borland命令進行配置,對Emcarbadero的make也是無效的。這個配置命令產生的make文件,只是用于老版本的Borland C++ Builder的make命令。
? 若要使用微軟的VC的nmake,就要在配置時使用命令python configure.py --platform win32-msvc,其中win32-msvc使用的是VC6的nmake;win32-msvc.net使用的是VC2003的nmake;win32-msvc2005使用的是VC2005的nmake;win32-msvc2008使用的是VC2008的nmake。根據--show-platforms命令顯示的結果,SIP的配置暫不支持VC2010和VS11下的nmake。若想知道SIP支持的所有平臺和編譯器,可以在命令行中使用python configure.py --show -platforms命令來查看。
??Linux:
? Linux下的SIP安裝與之類似,甚至更簡單,Linux的發行版如Ubuntu,都自動安裝了python和gcc,無需配置環境變量。
? 所以只要在官網上下載SIP的Linux下的tar.gz格式的代碼包,解壓到某個目錄中。然后在終端中進入該目錄,依次輸入python configure.py --platform linux-g++;make;make install即可。
第二部分:在Python中使用C/C++寫的函數
??1、首先,編寫個C文件,功能是將兩個數字相加并輸出,命名為add.c,這個將成為在Python中的模塊名,如下:
?? 2、接著 ,手工編寫SIP文件,在使用SIP的過程中,一個C/C++的源碼文件,必須對應一個同名的sip文件,命名為add.sip,如下:
C/C++ code
? 如果是源程序是用C++寫的,那么這里的(name=add, language="C")就可以省去。
? 這里的C源碼文件沒有頭文件,所以對應的sip文件很簡單。如果C/C++的源碼是實現部分,在實現部分還包括接口部分,即頭文件。那么在相應的sip文件中需要用
C/C++ code
? 來包含相應的頭文件。sip文件與正式的C/C++頭文件相似,但與之不同的是:sip文件不包含相應的頭文件的私有成員變量(private或protected)。更詳細的sip文件編寫規范,請參考riverbank官方網站上的說明文檔SIP Reference Guide。
?? 3、編譯C文件 。按照官網的說法,是編寫configure.py,但別急,先做一些必不可少的工作。在命令行將add.c編譯成add.o文件:輸入
gcc -c add.c
接著,將這一步生成的add.o文件生產庫文件:
ar -r libadd.a add.o
? 這兩步在這里是為一個單獨的C模塊測試的,如果是大量的C模塊,可以用一個makefile一并批量完成,這也是初學者容易模糊的地方。 記住,需要將libadd.a文件復制到Python文件夾下的libs文件夾中。 也可以將源代碼直接編譯成dll,命令為gcc --shared add.c -o add.dll, 記住要將生成的dll放到python\LIB\site-packages文件夾下。
?? 4、手工編寫configure.py文件 ,同樣,這個configure文件的編寫也不難,看下規范就會了(要會鳥語。。。)。這里,我們模仿官網的模版寫一個自己的configure.py。
Python code
?? 5、運行configure.py ,會生成一個makefile文件(直接用IDLE打開configure.py,按F5運行;或者命令行用python configure.py運行都可以)。
這里有個詭異的地方,有幾個朋友在這一步會報錯,說找不到add.sbf文件,而add.sbf文件應該是configure.py運行時調用相關函數自動產生的。若出現這個問題,請重新編譯SIP。如果是Windows下,最好是在另一臺機器上拷貝一個完整的包含能正常的SIP的Python文件夾,到有問題的機器上,將問題Python文件夾覆蓋掉。
?? 6、在命令行輸入make (這里會生成一個關于函數的警告,不用管它,我們是用來測試的。。。其他的應該沒什么問題,若有問題請檢查前面的步驟),生成add.pyd文件。然后再輸入make install(將add.pyd文件裝入到Python的Lib文件夾下的sit-packages文件夾中)。
?? 7、打開Python 的命令行,進行測試 :
Python code
(原諒我這么爛的模塊名。。。)
提示:
(1)、這些文件可以放到Python的文件夾下新建的文件夾中(所有的操作在這個目錄下的命令行窗口中使用)。注意,Python的父文件夾名不能有空格,否則會無法讀取庫文件。
總結
以上是生活随笔為你收集整理的Python SIP使用总结(WinLinux通用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义ProgressBar(圆)
- 下一篇: Linux下通过命令设置系统时间