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

資訊專欄INFORMATION COLUMN

C++開發python windows版本的擴展模塊示例

junfeng777 / 2132人閱讀

摘要:主要是庫文件頭文件文件不一致的問題。定義模塊函數其中函數參數是模塊自身,是傳遞的參數列表,返回值定義了一個整形數,這里會申請空間增加引用計數,交由來管理這個引用。

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

查看下當前系統路徑是否正確,如果是其他路徑的版本,可能會對的擴展庫開發產生影響。主要是庫文件、頭文件、dll文件不一致的問題。
1 頭文件和庫文件
首先創建文件 mymod.c 在文件中添加頭文件引用
頭文件引用 #include "Python.h",庫文件不需要指定,頭文件路徑在python的安裝路徑。

2 定義模塊函數
其中函數參數 self是模塊自身,args是python傳遞的參數列表,返回值定義了一個整形數0,這里會申請空間增加引用計數,交由python來管理這個引用。這里也可以返回NULL,python會收到一個異常。

include "Python.h"

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

3 申明模塊函數(開放給python)
第一個函數名稱,就是開放給python的名稱,不一定要與c語言的函數名稱一致,但還是盡量一致,方便跟進代碼;
第二個是函數指針,默認類型就是PyCFunction函數指針類型,也就是上面的函數類型;
第三個參數是開放給python的函數參數類型,這里我們設置的無參數METH_NOARGS,還可以設置METH_VARARGS 多個參數,METH_KEYWORDS key value參數,設置為METH_KEYWORDS必須與METH_VARARGS一起設置 METH_KEYWORDS|METH_VARARGS ,并且模塊函數會增加一個參數存放傳進來的參數字典;
第四個參數是函數說明,在python中調用help函數可以讀取;
這個定義是一個數據,可以設置多個函數PyMethodDef定義對象
/// 模塊函數列表
static PyMethodDef mymod_funcs[] = {
{
"testmod", //函數名稱
testmod, //函數指針
METH_NOARGS,//參數標識 無參數,
"testmod function." //函數說明 help(testmod)
},
{0,0,0,0} //數組結尾,可以申請多個函數
};

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

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

6 編譯安裝
創建一個文件setup.py
第一行代碼導入setup庫,其中name是打包的庫說明的.egg-info的文件名
version=“1.0” 這個說明文件名的后綴,如果不設置后綴會默認0.0.0
ext_modules=[Extension("mymod", ["mymod.c"] )] 中mymode是對應的模塊名稱和模塊文件名,["mymod.c"]里面是編譯為庫的源文件,可以是多個文件,這里是一個python的list數組。
from distutils.core import *
setup(
name="mymod", #打包文件名稱 庫說明文件的文件名
version="1.0",
ext_modules=[Extension("mymod", ["mymod.c"] )]
)

最后運行命令 python setup.py install

編譯成功,在當前路徑下會生成一個build目錄,里面是編譯好的內容,應為運行了install命令,所以不僅做了編譯還有安裝。
擴展庫安裝的路徑:F:Python-3.7.0Libsite-packages

7 擴展庫調用測試
擴展庫編譯和按照好后我們寫一個python代碼來測試


這樣我們就完成了我們第一個python擴展庫的程序

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29726.html

相關文章

  • C++開發python windows版本擴展模塊示例

    摘要:主要是庫文件頭文件文件不一致的問題。定義模塊函數其中函數參數是模塊自身,是傳遞的參數列表,返回值定義了一個整形數,這里會申請空間增加引用計數,交由來管理這個引用。 C++開發python windows版本的擴展模塊示例測試環境介紹和準備測試環境:操作系統:windows10Python版本:3.7.0VS版本:vs2015社區版(免費)相關工具下載:VS版本vs2015社區版(免費)...

    Meathill 評論0 收藏0
  • 機器視覺、模式識別庫匯總

    摘要:十開放模式識別項目開放模式識別項目,致力于開發出一套包含圖像處理計算機視覺自然語言處理模式識別機器學習和相關領域算法的函數庫。 一、開源生物特征識別庫 OpenBROpenBR 是一個用來從照片中識別人臉的工具。還支持推算性別與年齡。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、計算機視覺庫 OpenCVOpenC...

    habren 評論0 收藏0
  • Hyperledger Fabric(入門)

    摘要:腳本列出了在結束時安裝的映像。在不同的體系結構,將用標識體系結構的字符串替換。提供了許多來支持各種編程語言,官方發布了兩款針對和的和文檔。。 入門 在我們開始之前,如果你還沒有這樣做,你可能希望檢查是否已經在開發區塊鏈應用程序和/或運行Hyperledger Fabric的平臺上安裝了所有前提條件。 一旦安裝了前提條件,就可以下載并安裝HyperLedger Fabric了,當我們在F...

    SKYZACK 評論0 收藏0
  • python大佬養成計劃----HTML網頁設計<二>

    摘要:但是語言并沒有成功,究其原因,認為是其非開標識放造成的。已經成為最受歡迎的程序設計語言之一。年月,該語言作者在郵件列表上宣布將于年月日終止支持。其中很重要的一項就是的縮進規則。設計定位的設計哲學是優雅明確簡單。 文本標簽 換行標簽 -- br 是單標簽,意味著它沒有結束標簽。起強制換行作用 段落中的文字段落中的文字段落中的文字 水平分割線 -- hr 與br相同,也是單標簽。可用來區分...

    jiekechoo 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<