日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

使用python創(chuàng)建生成動(dòng)態(tài)鏈接庫dll的方法

瀏覽:57日期:2022-07-26 09:45:48

如今,隨著深度學(xué)習(xí)的發(fā)展,python已經(jīng)成為了深度學(xué)習(xí)研究中第一語言。絕大部分的深度學(xué)習(xí)工具包都有python的版本,很多重要算法都有python版本的實(shí)現(xiàn)。為了將這些算法應(yīng)用到具體工程中,這些工具包也提供了不同類型的接口。

動(dòng)態(tài)鏈接庫(.dll,.so)是系統(tǒng)開發(fā)中一種非常重要的跨語言協(xié)作方式。把python語言寫成的算法編譯成動(dòng)態(tài)庫,能夠提供給其他語言調(diào)用,這能夠在很大程度上提高算法的開發(fā)效率。

但是,雖然python可以調(diào)用其他語言生成的動(dòng)態(tài)庫,python作為一種腳本語言,本身是不能直接編譯生成動(dòng)態(tài)庫的。為了生成動(dòng)態(tài)庫,我們借助cython,將python腳本變成c語言文件。具體過程,我們通過一個(gè)簡(jiǎn)單的例子來解釋。

def str_add(str1,str2): return int(str1) + int(str2)

這個(gè)代碼,將兩個(gè)數(shù)字組成的字符串轉(zhuǎn)化成數(shù)字,并求和。我們把這個(gè)代碼保存成run.py備用。根據(jù)cython的語法,我們給出cython版本的函數(shù):

cdef public str_add(str1,str2): return int(str1) + int(str2)

和前面python版本的相比,cdef替換了def,并加了public關(guān)鍵字,表示這個(gè)函數(shù)要導(dǎo)出。將這個(gè)代碼保存成pyx文件,比如run.pyx。

接下來,我們執(zhí)行如下命令,把這個(gè)代碼變成c語言版本:

cython run.pyx

這時(shí),目錄下面生出來run.h和run.c兩個(gè)文件。這個(gè)兩個(gè)文件通過調(diào)用python的C-API實(shí)現(xiàn)了run.py代碼的功能。

接下來,我們編寫動(dòng)態(tài)庫的主文件dllmain.c:

#include <Python.h>#include <Windows.h>#include 'run.h' extern __declspec(dllexport) int __stdcall _str_add(const char * a, const char * b) { return PyLong_AsLong(str_add(PyUnicode_FromString(a),PyUnicode_FromString(b)));<br data-filtered='filtered'>} BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved) { switch( fdwReason ) { case DLL_PROCESS_ATTACH: Py_Initialize(); PyInit_run(); #dll初始化的時(shí)候調(diào)用,這是python3的寫法,python2改成,initrun()。參見生成的run.h break; case DLL_PROCESS_DETACH: Py_Finalize(); break; } return TRUE;}

該文件定義了導(dǎo)出函數(shù)_str_add。在python中,所有數(shù)據(jù)都以pyobject進(jìn)行存儲(chǔ)。這個(gè)函數(shù)通過PyUnicode_FromString,將兩個(gè)字符串變成python對(duì)象類型,并調(diào)用run.h里面的函數(shù)str_add求和,并把結(jié)果通過PyLong_AsLong函數(shù)從python對(duì)象,變成整形數(shù)字。

我們可以通過如下命令,將這個(gè)代碼編譯生成dll:

cl /LD dllmain.c run.c -IC:python36include C:python36libspython36.lib

這里python的路徑,根據(jù)不同電腦python的安裝位置,做相應(yīng)調(diào)整。

生成的dll,我們寫個(gè)簡(jiǎn)單調(diào)用,測(cè)試一下:

#include 'stdio.h'#include 'stdlib.h'extern __declspec(dllexport) int __stdcall _str_add(const char * a, const char * b); #pragma comment(lib,'dllmain.lib') int main(){ printf('%d n', _str_add('123','456')); return 0;}

輸出結(jié)果: 579,正好等于123+456。

通過以上步驟,我們已經(jīng)能夠把python代碼實(shí)現(xiàn)的功能,封裝成動(dòng)態(tài)庫。然而,這個(gè)動(dòng)態(tài)庫無法在沒有安裝python的機(jī)器上面運(yùn)行。事實(shí)上,python代碼,通常需要很多依賴包才能運(yùn)行。而且,每段代碼需要的依賴包是不一樣的。為了查找這些包,我們采用另外一個(gè)工具pyinstaller。具體步驟簡(jiǎn)介如下:

virtualenv envpack # 創(chuàng)建新的環(huán)境,python包依賴比較復(fù)雜,創(chuàng)建新環(huán)境可以減少最終引入的包c(diǎn)d envpack # 進(jìn)入目錄#復(fù)制run.py到這個(gè)目錄,run.py運(yùn)行需要的包,和最終dll需要的包是一樣的Scriptsactivate # 激活并切換到virtualenv環(huán)境pip install pyinstaller # 安裝打包工具pyinstallerpip install numpy # 安裝numpy等腳本需要的庫,查看你的importpyinstaller run.py # 打包命令Scriptsdeactivate # 打包成功后,使用命令取消激活環(huán)境需要打包的文件在envpackdist, 包括很多.dll和.pyd文件,把這些文件和dll一起發(fā)布即可。

總結(jié)

到此這篇關(guān)于使用python創(chuàng)建生成動(dòng)態(tài)鏈接庫dll的方法的文章就介紹到這了,更多相關(guān)python動(dòng)態(tài)鏈接庫dll內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文一区二区| 国产日韩欧美在线播放不卡| 精品视频网站| 日韩成人精品一区| 午夜性色一区二区三区免费视频| 9色精品在线| 最新国产拍偷乱拍精品| 国产亚洲毛片| 亚洲精品日韩久久| 五月国产精品| 欧美偷窥清纯综合图区| 美女免费视频一区| 福利视频一区| 日韩在线短视频| 婷婷综合在线| 美国欧美日韩国产在线播放| 日韩三级久久| 精品伊人久久| 日韩专区精品| 在线日韩一区| 亚洲v天堂v手机在线| 国产日韩一区二区三免费高清| 免费亚洲婷婷| 天堂资源在线亚洲| 免费人成在线不卡| 欧美日韩1区2区3区| 国产精品sm| 中文在线а√在线8| 亚洲精品一二三区区别| 日韩精品一区二区三区中文字幕| 国产v综合v| 欧美日韩国产一区二区三区不卡 | 久久99精品久久久久久园产越南| 亚洲欧洲一区二区天堂久久| 91综合久久爱com| 亚洲国产专区校园欧美| 黑森林国产精品av| 国产精品久久久久久久久久白浆 | 999久久久免费精品国产| 欧美日一区二区在线观看| 欧美在线不卡| 国产美女高潮在线观看| 久久www成人_看片免费不卡| 激情综合自拍| 免费看一区二区三区| 国产精品一二| 91成人精品在线| 日本va欧美va瓶| 麻豆视频在线看| 日韩高清电影一区| 黄色网一区二区| 国产偷自视频区视频一区二区| 日韩黄色在线观看| 中文字幕在线高清| 亚洲视频综合| 深夜福利视频一区二区| 激情视频网站在线播放色| 国产亚洲欧美日韩精品一区二区三区| 国产专区精品| 亚洲一区欧美二区| 国产不卡一区| 最新国产精品视频| 视频福利一区| 欧美精品国产一区| 亚洲精品极品少妇16p| 国产精品亚洲片在线播放| 香蕉精品视频在线观看| 久久a爱视频| 伊人www22综合色| 国产精品中文| 欧美搞黄网站| 国产精品对白| 日韩视频中文| 理论片午夜视频在线观看| 黄色亚洲免费| 麻豆成人av在线| 一区二区三区国产盗摄| 国产在线观看www| 日韩高清三区| 黄色成人91| 肉色欧美久久久久久久免费看 | 成人羞羞视频播放网站| 日韩视频精品在线观看| 国产精久久一区二区| 亚洲综合国产| 欧美精选视频一区二区| 国产精品极品| 少妇精品久久久一区二区三区| 久久久精品网| 国产成人黄色| 国产日韩欧美一区二区三区在线观看| 亚洲成人精选| 午夜影院一区| 国产欧美精品| 免费成人在线影院| 亚洲性视频h| 天堂av在线| 美女精品一区二区| 中文字幕乱码亚洲无线精品一区| 在线日韩欧美| 欧美日韩国产v| 精品入口麻豆88视频| 日韩av网站在线免费观看| 一区二区视频欧美| 亚洲四虎影院| 精品日韩一区| 国产精品日本一区二区不卡视频| 在线精品观看| av亚洲免费| 日韩网站中文字幕| 91综合网人人| 久久精品国产在热久久| 国产午夜久久av| 天海翼精品一区二区三区| 夜夜嗨一区二区| 激情婷婷欧美| 久久一区二区三区电影| 午夜欧美巨大性欧美巨大| 国产成人精品一区二区免费看京 | 欧美国产三级| 欧美视频久久| 亚洲精品乱码日韩| 视频一区二区三区在线| 先锋亚洲精品| 六月婷婷一区| 一区免费在线| 在线国产一区| 五月婷婷亚洲| 国产精品日本| 日韩一区二区久久| 亚洲综合精品| 少妇精品在线| 欧美中文一区| 国产精品片aa在线观看 | 国产一区二区久久久久| 久久精品国产在热久久| 久久99久久久精品欧美| 久久亚洲黄色| 成人在线超碰| 久久高清免费| 国产韩日影视精品| 午夜在线一区| 日韩美女国产精品| 日韩精品第二页| 久久精品超碰| 欧美黑人做爰爽爽爽| 成人午夜网址| 亚洲精品国产嫩草在线观看 | 婷婷国产精品| 日韩国产欧美一区二区| 伊人久久国产| 亚洲一本视频| 免费视频最近日韩| 久久国产欧美日韩精品| 红杏一区二区三区| 青青青免费在线视频| 亚洲精品午夜av福利久久蜜桃| 午夜日韩福利| 久久久天天操| 麻豆成人av在线| 三上亚洲一区二区| 免费在线日韩av| 综合日韩av| 国产99久久| 日韩精品一级| 美女高潮久久久| 中文日韩欧美| 成人午夜网址| 亚洲免费观看高清完整版在线观| 青青伊人久久| 一区二区三区四区在线看| 日韩精品一级| 久久天堂成人| 亚洲婷婷免费| 黄色在线网站噜噜噜| 中文在线а√在线8| 岛国av免费在线观看| 日韩在线短视频| 日韩午夜黄色| 亚洲欧美视频一区二区三区| 在线亚洲精品| 少妇精品久久久一区二区| 石原莉奈在线亚洲三区| 国产二区精品| 欧美精选一区二区三区| 成人午夜网址| 视频一区中文字幕国产| 国产精品任我爽爆在线播放 | 国产精品日韩久久久| 国产欧美日韩精品高清二区综合区| 国产色播av在线| 亚洲网址在线观看| 福利一区和二区| 视频一区中文字幕国产| 国产成人精品一区二区三区视频 | 久久精品国产亚洲一区二区三区| 免费视频亚洲| 98精品久久久久久久| 国产一区不卡| 国产日产高清欧美一区二区三区|