使用c語言擴充套件python

2022-04-11 11:26:53 字數 1061 閱讀 9655

背景:我們工作中可能有時需要和第三方對接,而第三方提供的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 import

setup, 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...