背景:我們工作中可能有時需要和第三方對接,而第三方提供的sdk可能是c語言或者c++編寫的,而我們程式使用的語言是python,這時候就需要使用python呼叫c庫
參考官方文件:
編寫python擴充套件分三步:
第一步:建立應用**
使用c語言編寫具體的功能**,如果sdk已經提供了並且不需要我們整合,則跳過這一步
第二步:根據樣板編寫封裝**
樣板**主要包含四部分
1. 包含python標頭檔案
2. 為每乙個模組函式新增形如 static pyobject* module_func()的封裝函式
關於函式引數轉換和返回值轉換可以參考官方文件:
3. 將所有模組函式新增到static pymethoddef modulemethods陣列中,這是個二維陣列
例如:
static pymethoddef spammethods = ,.../* sentinel */
};
4. 新增模組初始化函式void initmodule,在初始化函式中呼叫py_initmodule(「模組名」, modulemethods)進行初始化
第三步:編譯並測試
使用distutils包來進行編譯工作
1. 建立setup.py
from distutils.core importsetup, extension
setup(name="
custom
", version="
1.0"
, ext_modules=[extension("
custom
", ["
custom.c
"])])
2. 執行setup.py來編譯並鏈結**
1) python setup.py build 編譯,會在當前目錄下生成build資料夾
2) python setup.py install 安裝,將編譯好的包放到site-packages中
3. 在python中匯入模組
4. 測試函式
使用C語言擴充套件Python 四
首先,遵循 測試先行 的原則,先來看我們改造後的python這一端,你可以每次讀取音訊原始檔的乙個資料塊,將其轉遞給encoder物件的encode方法,這樣無論你的原始檔是何種格式,你都可以在encoder中進行自由的控制,示例 如下 import clame inbufsize 4096 if ...
使用C語言擴充套件Python 四
首先,遵循 測試先行 的原則,先來看我們改造後的python這一端,你可以每次讀取音訊原始檔的乙個資料塊,將其轉遞給encoder物件的encode方法,這樣無論你的原始檔是何種格式,你都可以在encoder中進行自由的控制,示例 如下 import clame inbufsize 4096 if ...
C語言擴充套件Python
python具有很好的開發靈活性,最大的特點是c語言可以對python進行擴充套件,目前工作中正在進行相關的開發,第一篇文章作為基礎.實現c函式,用python api封裝,實現倆個功能,1.say hello,列印hello world 2.calc pv,做加法用算.以下為使用方法 01pyth...