最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++/Python混合編程之小結(jié)Pybind11的使用

 更新時(shí)間:2025年05月07日 10:26:29   作者:為時(shí)不晚L  
Pybind11是一個(gè)輕量級(jí)的C++庫(kù),用于將你的C++代碼暴露給Python調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、pybind11簡(jiǎn)單介紹

一些python和C++混編方案:

  • Python官方的Python/C API, 缺點(diǎn):所有數(shù)據(jù)類(lèi)型必須手動(dòng)改為Cpython封裝的binding類(lèi)型;
  • Cython,編譯器支持python代碼轉(zhuǎn)為C代碼,缺點(diǎn):移值和復(fù)用成本高
  • SIWG 主要解決高級(jí)語(yǔ)言與C和C++語(yǔ)言交互問(wèn)題,支持10幾種編程語(yǔ)言如java、python、C#等。在python端性能表現(xiàn)不太好
  • Boost.Python  為C++中廣泛應(yīng)用的Boost開(kāi)源庫(kù),編譯和依賴(lài)關(guān)系繁重,如果只用于解決python的交互,大材小用了。
  • pyind11   理解為Boost.Python的藍(lán)本,基于C++11應(yīng)用了很多新特性,Pybind11 通過(guò) C++ 編譯時(shí)的自省來(lái)推斷類(lèi)型信息,來(lái)最大程度地減少傳統(tǒng)拓展 Python 模塊時(shí)繁雜的樣板代碼, 且實(shí)現(xiàn)了常見(jiàn)數(shù)據(jù)類(lèi)型,如 STL 數(shù)據(jù)結(jié)構(gòu)、智能指針、類(lèi)、函數(shù)重載、實(shí)例方法等到 Python 的自動(dòng)轉(zhuǎn)換,其中函數(shù)可以接收和返回自定義數(shù)據(jù)類(lèi)型的值、指針或引用

簡(jiǎn)言之,Pybind11 是一個(gè)輕量級(jí)的 C++ 庫(kù),用于將你的 C++ 代碼暴露給 Python 調(diào)用(反之也可,但主要還是前者)。Pybind11 借鑒了 Boost::Python 庫(kù)的設(shè)計(jì),但使用了更為簡(jiǎn)潔的實(shí)現(xiàn)方式,保證開(kāi)發(fā)效率和實(shí)用性。其幫助文檔鏈接如下:

官方文檔:  pybind11 documentation

中文版本: 安裝庫(kù) — pybind11 文檔

二、pybind11 環(huán)境準(zhǔn)備

1.配置環(huán)境說(shuō)明

window10+  VS2017+python3.10(本電腦安裝了Anaconda是python3.10這個(gè)環(huán)境,也可以使用其它版本,window要求Visual Studio 2017 及更新版本)

2.安裝pybind11

方式1:直接下載源代碼 git clone GitHub - pybind/pybind11: Seamless operability between C++11 and Python

方式2:直接用pip命令安裝:pip install pybind11  或使用 pip3 install pybind11 (pip3同時(shí)會(huì)下載python3.0+版本)

查看python -m 默認(rèn)下載路徑:

直接指定存放目錄的下載方式:

python -m pip install pybind11 --target=D:\python\site-packages

下載的pybind11目錄如下:

三、python調(diào)用C++動(dòng)態(tài)庫(kù)測(cè)試?yán)?/h2>

底層邏輯:把C++中編寫(xiě)的函數(shù),用pybind封裝為調(diào)用的pyd庫(kù),成功在python中import調(diào)用;

說(shuō)明:pybind11 是只包含頭文件的庫(kù),因此不需要鏈接到任何特殊的庫(kù),也沒(méi)有中間(magic)轉(zhuǎn)換步驟。win系統(tǒng)上C++編程時(shí)只要包含到include路徑就行。注意要包含對(duì)應(yīng)的python庫(kù)目錄。

1.VS屬性配置

VS2017上新建項(xiàng)目,屬性中包含pybind 和python對(duì)應(yīng)的include目錄。 我使用的是conda中python3.10所以路徑不一樣。

附加庫(kù)目錄,增加python的庫(kù)目錄:

添加python的lib庫(kù):

在工程屬性—>常規(guī)—>目標(biāo)文件擴(kuò)展名修改為.pyd,配置類(lèi)型改為.dll

2.編寫(xiě)綁定文件并測(cè)試

方法:使用PYBIND11_MODULE()將所有需要封裝的代碼都放在里面。

PYBIND11_MODULE() 宏創(chuàng)建了一個(gè)函數(shù),當(dāng) Python 內(nèi)部發(fā)出 import 語(yǔ)句時(shí)將調(diào)用該函數(shù)。

第一個(gè)參數(shù):模塊名(testPyd)作為第一個(gè)宏參數(shù)給出(它不應(yīng)該在引號(hào)中)。

第二個(gè)參數(shù):m定義了類(lèi)型的變量 py::module_ ,它是創(chuàng)建綁定的主接口。

module_::def() :會(huì)生成綁定代碼,將 add() 函數(shù)公開(kāi)給 Python。

CPP文件如下:

編譯生成文件:(生成的文件要和綁定模塊名稱(chēng)一致)

 其中,pyd文件是生成的動(dòng)態(tài)庫(kù),可供給python調(diào)用。以下為python調(diào)用testPyd.pyd的add函數(shù)的測(cè)試結(jié)果:

如圖,在python中成功調(diào)用add函數(shù)。 注意運(yùn)行時(shí)一定要在有testPyd.pyd文件的目錄。

3.結(jié)構(gòu)體類(lèi)型的綁定

在python中測(cè)試如下:

上面print(p)的信息沒(méi)有具體name,可以使用 __repr__函數(shù):

4.其它數(shù)據(jù)類(lèi)型

可以查看幫助文檔,按照上面的方式綁定到模塊中。如果C++文件中代碼調(diào)用了第三方dll庫(kù),在python中調(diào)用時(shí),需要把dll文件放在py文件運(yùn)行目錄中

四、python調(diào)用C++的測(cè)試?yán)?/h2>

底層邏輯:pybind11 使用C++ 封裝了 Python 類(lèi)型和函數(shù),通過(guò)python解釋器可以供C++調(diào)用

1.編寫(xiě)一個(gè)example.py文件:【我存放于工程目錄子文件夾python_scripts中】

2.編寫(xiě)調(diào)用example模塊的C++main文件:

3.運(yùn)行測(cè)試main代碼

記得在屬性中把,輸出文件格式改為.exe。測(cè)試打印結(jié)果如下:

結(jié)果一致!

4.遺留問(wèn)題

在初始化python環(huán)境時(shí),開(kāi)始使用的是py::scoped_interpreter guard{};初始化方法,但這個(gè)方法報(bào)如下錯(cuò)誤,有檢測(cè)自己的環(huán)境配置都是正常,也按初始環(huán)境的打印設(shè)置了路徑,仍未解決。原因不明,暫時(shí)擱置在這里:

引發(fā)了未經(jīng)處理的異常:讀取訪(fǎng)問(wèn)權(quán)限沖突。

this->m_ptr->**ob_type** 是 0xFFFFFFFFFFFFFFE7。

到此這篇關(guān)于C++/Python混合編程之小結(jié)Pybind11的使用的文章就介紹到這了,更多相關(guān)pybind11 c++混合編程python 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Python關(guān)于拓?fù)渑判蛑R(shí)點(diǎn)講解

    Python關(guān)于拓?fù)渑判蛑R(shí)點(diǎn)講解

    在本篇文章里小編給大家分享了一篇關(guān)于Python關(guān)于拓?fù)渑判蛑R(shí)點(diǎn)講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • pycharm下打開(kāi)、執(zhí)行并調(diào)試scrapy爬蟲(chóng)程序的方法

    pycharm下打開(kāi)、執(zhí)行并調(diào)試scrapy爬蟲(chóng)程序的方法

    本篇文章主要介紹了pycharm下打開(kāi)、執(zhí)行并調(diào)試scrapy爬蟲(chóng)程序的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • PyQt6/PySide6中QTreeView類(lèi)的實(shí)現(xiàn)

    PyQt6/PySide6中QTreeView類(lèi)的實(shí)現(xiàn)

    QTreeView是PyQt6或PySide6庫(kù)中用于顯示分層數(shù)據(jù)的控件,本文主要介紹了PyQt6/PySide6中QTreeView類(lèi)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • python列表生成器迭代器實(shí)例解析

    python列表生成器迭代器實(shí)例解析

    這篇文章主要介紹了python列表生成器迭代器實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python使用Spire.XLS for Python輕松實(shí)現(xiàn)將Excel轉(zhuǎn)換為PDF

    Python使用Spire.XLS for Python輕松實(shí)現(xiàn)將Excel轉(zhuǎn)換為PDF

    在許多商務(wù)工作流程中,Excel 文件常用于存儲(chǔ)和分析數(shù)據(jù),然而,在共享報(bào)告或發(fā)票時(shí),將其轉(zhuǎn)換為 PDF 能確保內(nèi)容在不同設(shè)備上保持固定和可讀,下面我們就來(lái)看看如何使用Python實(shí)現(xiàn)Excel到PDF的轉(zhuǎn)換吧
    2025-11-11
  • pytorch 如何在GPU上訓(xùn)練

    pytorch 如何在GPU上訓(xùn)練

    這篇文章主要介紹了pytorch 如何在GPU上訓(xùn)練的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python基于win32api實(shí)現(xiàn)鍵盤(pán)輸入

    python基于win32api實(shí)現(xiàn)鍵盤(pán)輸入

    這篇文章主要介紹了python基于win32api實(shí)現(xiàn)鍵盤(pán)輸入,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 基于matplotlib中ion()和ioff()的使用詳解

    基于matplotlib中ion()和ioff()的使用詳解

    這篇文章主要介紹了基于matplotlib中ion()和ioff()的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 一文詳解Python是如何處理SSH的

    一文詳解Python是如何處理SSH的

    SSH是一種網(wǎng)絡(luò)安全協(xié)議,旨在通過(guò)加密和認(rèn)證機(jī)制實(shí)現(xiàn)安全的訪(fǎng)問(wèn),遠(yuǎn)程登錄和文件傳輸?shù)葮I(yè)務(wù),下面小編就來(lái)和大家聊聊Python是如何處理SSH的吧
    2025-02-02
  • 關(guān)于Matplotlib繪制動(dòng)態(tài)實(shí)時(shí)曲線(xiàn)的方法改進(jìn)指南

    關(guān)于Matplotlib繪制動(dòng)態(tài)實(shí)時(shí)曲線(xiàn)的方法改進(jìn)指南

    這篇文章主要給大家介紹了關(guān)于Matplotlib繪制動(dòng)態(tài)實(shí)時(shí)曲線(xiàn)的相關(guān)資料,matplotlib是python里最popular的畫(huà)圖工具,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06

最新評(píng)論

浮梁县| 高邮市| 富源县| 兴安县| 孟村| 封开县| 孝昌县| 新郑市| 临海市| 威宁| 呈贡县| 江永县| 长宁区| 陕西省| 衡阳市| 临西县| 香格里拉县| 玉田县| 常宁市| 大荔县| 星子县| 松潘县| 惠水县| 连山| 乐平市| 嵩明县| 泗水县| 连州市| 洛川县| 定西市| 扶余县| 清原| 聂拉木县| 星座| 梁平县| 同心县| 大方县| 申扎县| 镇康县| 栾川县| 逊克县|