国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

C++開(kāi)發(fā)python windows版本的擴(kuò)展模塊示例

Meathill / 2899人閱讀

摘要:主要是庫(kù)文件頭文件文件不一致的問(wèn)題。定義模塊函數(shù)其中函數(shù)參數(shù)是模塊自身,是傳遞的參數(shù)列表,返回值定義了一個(gè)整形數(shù),這里會(huì)申請(qǐng)空間增加引用計(jì)數(shù),交由來(lái)管理這個(gè)引用。

C++開(kāi)發(fā)python windows版本的擴(kuò)展模塊示例
測(cè)試環(huán)境介紹和準(zhǔn)備
測(cè)試環(huán)境:
操作系統(tǒng):windows10
Python版本:3.7.0
VS版本:vs2015社區(qū)版(免費(fèi))
相關(guān)工具下載:
VS版本vs2015社區(qū)版(免費(fèi))
win10SDK(安裝vs2015是可以選擇,如果沒(méi)有安裝則需要獨(dú)立安裝)
Python3.7.0 win32 安裝文件
http://ffmpeg.club/python
本示例不使用vs來(lái)編輯,但需要安裝vs的編譯環(huán)境,直接用python的distutils進(jìn)行編譯安裝,注意這里安裝的python是32位的,所以編譯出來(lái)庫(kù)也是32位程序。
首先要檢測(cè)系統(tǒng)中是否有其他python版本,防止沖突
進(jìn)入python命令行
import sys
print(sys.path)

查看下當(dāng)前系統(tǒng)路徑是否正確,如果是其他路徑的版本,可能會(huì)對(duì)的擴(kuò)展庫(kù)開(kāi)發(fā)產(chǎn)生影響。主要是庫(kù)文件、頭文件、dll文件不一致的問(wèn)題。
1 頭文件和庫(kù)文件
首先創(chuàng)建文件 mymod.c 在文件中添加頭文件引用
頭文件引用 #include "Python.h",庫(kù)文件不需要指定,頭文件路徑在python的安裝路徑。

2 定義模塊函數(shù)
其中函數(shù)參數(shù) self是模塊自身,args是python傳遞的參數(shù)列表,返回值定義了一個(gè)整形數(shù)0,這里會(huì)申請(qǐng)空間增加引用計(jì)數(shù),交由python來(lái)管理這個(gè)引用。這里也可以返回NULL,python會(huì)收到一個(gè)異常。

include "Python.h"

///模塊函數(shù)
static PyObject testmod(PyObject self,PyObject*args)
{
//返回python的long整形,c語(yǔ)言中引用計(jì)數(shù)+1,返回值交由python釋放
return PyLong_FromLong(0);
}

3 申明模塊函數(shù)(開(kāi)放給python)
第一個(gè)函數(shù)名稱(chēng),就是開(kāi)放給python的名稱(chēng),不一定要與c語(yǔ)言的函數(shù)名稱(chēng)一致,但還是盡量一致,方便跟進(jìn)代碼;
第二個(gè)是函數(shù)指針,默認(rèn)類(lèi)型就是PyCFunction函數(shù)指針類(lèi)型,也就是上面的函數(shù)類(lèi)型;
第三個(gè)參數(shù)是開(kāi)放給python的函數(shù)參數(shù)類(lèi)型,這里我們?cè)O(shè)置的無(wú)參數(shù)METH_NOARGS,還可以設(shè)置METH_VARARGS 多個(gè)參數(shù),METH_KEYWORDS key value參數(shù),設(shè)置為METH_KEYWORDS必須與METH_VARARGS一起設(shè)置 METH_KEYWORDS|METH_VARARGS ,并且模塊函數(shù)會(huì)增加一個(gè)參數(shù)存放傳進(jìn)來(lái)的參數(shù)字典;
第四個(gè)參數(shù)是函數(shù)說(shuō)明,在python中調(diào)用help函數(shù)可以讀??;
這個(gè)定義是一個(gè)數(shù)據(jù),可以設(shè)置多個(gè)函數(shù)PyMethodDef定義對(duì)象
/// 模塊函數(shù)列表
static PyMethodDef mymod_funcs[] = {
{
"testmod", //函數(shù)名稱(chēng)
testmod, //函數(shù)指針
METH_NOARGS,//參數(shù)標(biāo)識(shí) 無(wú)參數(shù),
"testmod function." //函數(shù)說(shuō)明 help(testmod)
},
{0,0,0,0} //數(shù)組結(jié)尾,可以申請(qǐng)多個(gè)函數(shù)
};

4 模塊定義
///4 模塊定義
static PyModuleDef mymod_module = {
PyModuleDef_HEAD_INIT,
"mymod", //模塊名
"mymod is first module test", //模塊說(shuō)明 通過(guò)help(模塊名)
-1, //模塊空間,子解釋器用,-1不使用
mymod_funcs //模塊函數(shù),前面定義的函數(shù)申明數(shù)組
};

5 添加入口函數(shù)
其中PyMODINIT_FUNC 宏在windows中是
PyMODINIT_FUNC __declspec(dllexport) PyObject*,
也就是入口的動(dòng)態(tài)鏈接庫(kù)函數(shù),不同于ctypes庫(kù),擴(kuò)展庫(kù)只有入口函數(shù)需要定義__declspec(dllexport)導(dǎo)出函數(shù)符號(hào),其他的函數(shù)不需要。
PyModule_Create創(chuàng)建python的模塊,參數(shù)是前面定義的模塊,返回直接返回模塊對(duì)象,在python中所有類(lèi)型都可以轉(zhuǎn)為PyObject
///1 擴(kuò)展庫(kù)入口函數(shù) PyInit_ 固定的開(kāi)頭 mymod模塊名
PyMODINIT_FUNC PyInit_mymod(void)
{
printf("PyInit_mymodn");
///2 模塊創(chuàng)建函數(shù) 參數(shù) PyModuleDef
return PyModule_Create(&mymod_module);
}

6 編譯安裝
創(chuàng)建一個(gè)文件setup.py
第一行代碼導(dǎo)入setup庫(kù),其中name是打包的庫(kù)說(shuō)明的.egg-info的文件名
version=“1.0” 這個(gè)說(shuō)明文件名的后綴,如果不設(shè)置后綴會(huì)默認(rèn)0.0.0
ext_modules=[Extension("mymod", ["mymod.c"] )] 中mymode是對(duì)應(yīng)的模塊名稱(chēng)和模塊文件名,["mymod.c"]里面是編譯為庫(kù)的源文件,可以是多個(gè)文件,這里是一個(gè)python的list數(shù)組。
from distutils.core import *
setup(
name="mymod", #打包文件名稱(chēng) 庫(kù)說(shuō)明文件的文件名
version="1.0",
ext_modules=[Extension("mymod", ["mymod.c"] )]
)

最后運(yùn)行命令 python setup.py install

編譯成功,在當(dāng)前路徑下會(huì)生成一個(gè)build目錄,里面是編譯好的內(nèi)容,應(yīng)為運(yùn)行了install命令,所以不僅做了編譯還有安裝。
擴(kuò)展庫(kù)安裝的路徑:F:Python-3.7.0Libsite-packages

7 擴(kuò)展庫(kù)調(diào)用測(cè)試
擴(kuò)展庫(kù)編譯和按照好后我們寫(xiě)一個(gè)python代碼來(lái)測(cè)試


這樣我們就完成了我們第一個(gè)python擴(kuò)展庫(kù)的程序

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42712.html

相關(guān)文章

  • C++開(kāi)發(fā)python windows版本擴(kuò)展模塊示例

    摘要:主要是庫(kù)文件頭文件文件不一致的問(wèn)題。定義模塊函數(shù)其中函數(shù)參數(shù)是模塊自身,是傳遞的參數(shù)列表,返回值定義了一個(gè)整形數(shù),這里會(huì)申請(qǐng)空間增加引用計(jì)數(shù),交由來(lái)管理這個(gè)引用。 C++開(kāi)發(fā)python windows版本的擴(kuò)展模塊示例測(cè)試環(huán)境介紹和準(zhǔn)備測(cè)試環(huán)境:操作系統(tǒng):windows10Python版本:3.7.0VS版本:vs2015社區(qū)版(免費(fèi))相關(guān)工具下載:VS版本vs2015社區(qū)版(免費(fèi))...

    junfeng777 評(píng)論0 收藏0
  • 機(jī)器視覺(jué)、模式識(shí)別庫(kù)匯總

    摘要:十開(kāi)放模式識(shí)別項(xiàng)目開(kāi)放模式識(shí)別項(xiàng)目,致力于開(kāi)發(fā)出一套包含圖像處理計(jì)算機(jī)視覺(jué)自然語(yǔ)言處理模式識(shí)別機(jī)器學(xué)習(xí)和相關(guān)領(lǐng)域算法的函數(shù)庫(kù)。 一、開(kāi)源生物特征識(shí)別庫(kù) OpenBROpenBR 是一個(gè)用來(lái)從照片中識(shí)別人臉的工具。還支持推算性別與年齡。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、計(jì)算機(jī)視覺(jué)庫(kù) OpenCVOpenC...

    habren 評(píng)論0 收藏0
  • Hyperledger Fabric(入門(mén))

    摘要:腳本列出了在結(jié)束時(shí)安裝的映像。在不同的體系結(jié)構(gòu),將用標(biāo)識(shí)體系結(jié)構(gòu)的字符串替換。提供了許多來(lái)支持各種編程語(yǔ)言,官方發(fā)布了兩款針對(duì)和的和文檔。。 入門(mén) 在我們開(kāi)始之前,如果你還沒(méi)有這樣做,你可能希望檢查是否已經(jīng)在開(kāi)發(fā)區(qū)塊鏈應(yīng)用程序和/或運(yùn)行Hyperledger Fabric的平臺(tái)上安裝了所有前提條件。 一旦安裝了前提條件,就可以下載并安裝HyperLedger Fabric了,當(dāng)我們?cè)贔...

    SKYZACK 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----HTML網(wǎng)頁(yè)設(shè)計(jì)<二>

    摘要:但是語(yǔ)言并沒(méi)有成功,究其原因,認(rèn)為是其非開(kāi)標(biāo)識(shí)放造成的。已經(jīng)成為最受歡迎的程序設(shè)計(jì)語(yǔ)言之一。年月,該語(yǔ)言作者在郵件列表上宣布將于年月日終止支持。其中很重要的一項(xiàng)就是的縮進(jìn)規(guī)則。設(shè)計(jì)定位的設(shè)計(jì)哲學(xué)是優(yōu)雅明確簡(jiǎn)單。 文本標(biāo)簽 換行標(biāo)簽 -- br 是單標(biāo)簽,意味著它沒(méi)有結(jié)束標(biāo)簽。起強(qiáng)制換行作用 段落中的文字段落中的文字段落中的文字 水平分割線 -- hr 與br相同,也是單標(biāo)簽??捎脕?lái)區(qū)分...

    jiekechoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<