如何使用C來擴充套件python功能。

2021-06-26 21:17:36 字數 1600 閱讀 3951

本文件和所包含程式為mit授權

我們來實現乙個簡單的加法的擴充套件模組!

建立乙個目錄,整個目錄名中不要包含中文。在目錄下建立

add.c,內容如下:

#include ;

static pyobject* add(pyobject *self, pyobject *args);

//一定宣告為static,把他們限制在這個檔案範圍裡。 幾乎所有的引數都是pyobject型別。 在python,每個東西都是object。

static pyobject* add(pyobject* self, pyobject* args)

static pymethoddef addmethods =

, };

/*這個是乙個c的結構。他來完成乙個對映。 我們需要把我們擴充套件的函式都對映到這個表裡。表的第乙個欄位是python真正認識的。是python

裡的方法名字。 第二個欄位是python裡的這個方法名字的具體實現的函式名。 在python裡呼叫add, 真正執行的是用c寫的add函式。

第三個欄位是meth_varargs, 他告訴python,add是呼叫c函式來實現的。第四個欄位是這個函式的說明。如果你在python裡來help這個函式,

將顯示這個說明。相當於在python裡的函式的文件說明。*/

pymodinit_func initadd()

/*注意,這個函式的名字不能改動。 必須是init+模組名字。 我們的模組名字是add。所以這個函式是initadd()。

這樣python在匯入add 的模組時候,才會找到這個函式,並呼叫。這個函式呼叫py_initmodule來將模組名字和對映表結合在一起。

他表示,add這個模組使用addmethods這個對映表。python應該這樣匯入我們的module的.*/

複製**

然後建立setup.py這個檔案,內容如下:

#! /usr/bin/python

from distutils.core import setup, extension

module1 = extension('add', sources = ['add.c'])

setup (name = 'packagename', version = '1.0', description = 'this is a demo package', ext_modules = [module1])

複製**

在msdos下進入這個目錄,輸入命令setup.py build。

如果你能編譯成功,到你所在目錄的build\lib.win32-2.3下會發現add.pyd檔案,將檔案複製到你所需要的地方,啟動python,然後:

d:\c>;python

python 2.3.3 (#51, dec 18 2003, 20:22:39) [msc v.1200 32 bit (intel)] on win32

>;>;>; import add

>;>;>; print dir(add)

['__doc__', '__file__', '__name__', 'add']

>;>;>; add.add(1,2)

3>;>;>;

複製**

使用vs2008來擴充套件python的C庫

1 首先建立乙個dll專案 注意要從win32的控制台那裡建立 然後在彈出的視窗那裡選dll和空專案 就新建了乙個空專案dll了 2 然後莪們寫乙個最簡單的hello world庫來供python來呼叫 下面是c include include char const greet boost pyth...

使用C語言來擴充套件PHP,寫PHP擴充套件dll

以前寫過一次php擴充套件dll,那個是利用呼叫系統的com口實現的擴充套件,與php不能真正融合。心血來潮,研究了一下php的原始碼,網上找了一些資料,自己嘗試寫了乙個擴充套件dll,測試沒問題。下面記錄一下具體擴充套件方法 3 把vc 6.0安裝目錄中的 microsoft visual stu...

使用C語言來擴充套件PHP,寫PHP擴充套件dll

以前寫過一次php擴充套件dll,那個是利用呼叫系統的com口實現的擴充套件,與php不能真正融合。心血來潮,研究了一下php的原始碼,網上找了一些資料,自己嘗試寫了乙個擴充套件dll,測試沒問題。下面記錄一下具體擴充套件方法 3 把vc 6.0安裝目錄中的 microsoft visual stu...