欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++通過(guò)內(nèi)嵌解釋器調(diào)用Python及間接調(diào)用Python三方庫(kù)

 更新時(shí)間:2021年12月30日 10:43:30   作者:Method.Jiao  
本文主要介紹了C++通過(guò)內(nèi)嵌解釋器調(diào)用Python及間接調(diào)用Python三方庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文章目的是脫離安裝Python環(huán)境的前提下,由C++程序調(diào)用Python程序及Python相關(guān)三方庫(kù)

1.移植Python解釋器

Python環(huán)境的目錄結(jié)構(gòu)

python環(huán)境

路徑詳解

需要用的如下圖
1.紅色部分是生成路徑下解釋器運(yùn)行時(shí)依賴
將紅色部分拷貝到C++編譯主ExE路徑下即可
2.藍(lán)色部分是VS配置編譯時(shí)依賴

路徑或文件名 作用
DLLs Python內(nèi)部運(yùn)行時(shí)核心及一些驅(qū)動(dòng)
Lib 這里存放Python基礎(chǔ)類庫(kù),開(kāi)發(fā)人員所下載的Python三方庫(kù)也會(huì)放在此目錄下
python36.dll Python運(yùn)行時(shí)主依賴

路徑或文件名 作用
include C++調(diào)用所依賴的頭文件,include時(shí)引用Python.h即可
libs C++調(diào)用所依賴的靜態(tài)描述文件,C++Dll隱式調(diào)用引用python36.lib即可

2.VS配置(VS2017為例,此教程與VS版本無(wú)關(guān))

這里我就寫(xiě)絕對(duì)路徑為例
在這里插入圖片描述
記得將Dlls,Lib,python36.dll拷貝到生成目錄下,如果新增python三方庫(kù),重新拷貝Lib文件夾或者進(jìn)行whl安裝,這里就不做whl的介紹了

//在stdafx.cpp中
#pragma comment(lib,"python36.lib")

3.C++調(diào)用程序樣例

Py_Initialize();//加載Python解釋器
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('Dlls/')");

PyObject * pModule = NULL;
PyObject * pFunc = NULL;
PyObject *pArgs = NULL;
PyObject *pResult = NULL;
pModule = PyImport_ImportModule("ExternalPythonTool");//Python py文件名
if (pModule == nullptr)
	return true;
pFunc = PyObject_GetAttrString(pModule, "add_func");//py文件內(nèi)函數(shù)名
//傳入?yún)?shù)
pArgs = Py_BuildValue("ii", 1, 2);
//執(zhí)行函數(shù)
pResult = PyObject_CallObject(pFunc, pArgs);
//返回值為C++
double a = PyLong_AsDouble(pResult);

Py_Finalize();//卸載Python解釋器

Py_Initialize方法初始化消耗資源較大,不建議反復(fù)進(jìn)行初始化及卸載。

4.被調(diào)Python程序樣例

簡(jiǎn)單加法運(yùn)算,并且調(diào)用了numpy裝載array,作為c++間接調(diào)用Python三方庫(kù)的測(cè)試

//ExternalPythonTool.py
import math
import numpy as np
def add_func(x,y):
    a = math.sqrt(9)
    data = [[1,2],[3,4],[5,6]]
    b = np.array(data)
    return x + y

將ExternalPythonTool.py也拷貝到C++exe運(yùn)行路徑

教程到此結(jié)束,網(wǎng)上諸多教程沒(méi)有說(shuō)明Dlls文件夾的作用,導(dǎo)致Python引用了如numpy 等三方庫(kù)后PyImport_ImportModule環(huán)節(jié)就會(huì)出錯(cuò),經(jīng)學(xué)習(xí)解釋器機(jī)理發(fā)現(xiàn)了Dlls內(nèi)pyd文件的作用,特此出一詳解教程希望和大家共同學(xué)習(xí)。

相關(guān)文章

最新評(píng)論