日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Python SIP使用总结(WinLinux通用)

發布時間:2023/12/9 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的模塊名,如下:

C/C++ code
/* File : add.c */ int add(int x, int y) { int g; g = x + y;return g; }

?? 2、接著 ,手工編寫SIP文件,在使用SIP的過程中,一個C/C++的源碼文件,必須對應一個同名的sip文件,命名為add.sip,如下:
C/C++ code
/* Define the SIP wrapper to the add library. */ %Module(name=add, language="C") int add(int x, int y);

? 如果是源程序是用C++寫的,那么這里的(name=add, language="C")就可以省去。

? 這里的C源碼文件沒有頭文件,所以對應的sip文件很簡單。如果C/C++的源碼是實現部分,在實現部分還包括接口部分,即頭文件。那么在相應的sip文件中需要用
C/C++ code
%TypeHeaderCode #include <word.h> %End

? 來包含相應的頭文件。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
import os import sipconfig# The name of the SIP build file generated by SIP and used by the build # system. build_file = "add.sbf"# Get the SIP configuration information. config = sipconfig.Configuration()# Run SIP to generate the code. os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "add.sip"]))# Create the Makefile. makefile = sipconfig.SIPModuleMakefile(config, build_file)# Add the library we are wrapping. The name doesn't include any platform # specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the # ".dll" extension on Windows). makefile.extra_libs = ["add"]# Generate the Makefile itself. makefile.generate()

?? 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
>>>import add >>>add.add(4, 7) 11 >>>

(原諒我這么爛的模塊名。。。)

提示:

(1)、這些文件可以放到Python的文件夾下新建的文件夾中(所有的操作在這個目錄下的命令行窗口中使用)。注意,Python的父文件夾名不能有空格,否則會無法讀取庫文件。


總結

以上是生活随笔為你收集整理的Python SIP使用总结(WinLinux通用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。