C++調用python


前言:我是在Visual studio中使用C++調用python的。如果需要使用QT編譯器,QT中的環境配置自行查找。

C++調用python步驟:

第一步:在VS中進行環境配置,使得可以調用python.h庫。

找到包含.h文件的Include文件夾,將其絕對路徑添加到包含目錄中;找到包含.lib文件的libs文件夾,並將其絕對路徑添加到庫目錄中。

 

 

此處的注意事項:原本在libs文件中是沒有python39_d.lib文件的,此時需要手動的對python39.lib文件進行復制並重命名為python39_d.lib,以免發生錯誤,如下圖所示:

 

此時使用#include”Python.h”庫函數可能會出現找不到.dll文件的問題,此時的解決辦法有兩個:一:將python39.dll文件拷貝到system32文件夾下。二:將python39.dll文件拷貝到此C++工程目錄下。兩種方法都可解決此問題。

 

第二步:在VS編譯器中調用python程序。程序如下圖所示:

 

首先需要設置python解釋器的位置,如我是用的是miniconda中虛擬環境pytorch中的python解釋器,則使用main主函數中的第一句,大寫L不要落下。在使用python解釋器前需要對其進行初始化的操作。

隨后的PyRun_SimpleString()函數是在C++中使用python中的語句,例如Import torch,則是測試調用torch包是否成功。注:我在調用Numpy這個包的時候,出現未找到的問題,但是在下載pytorch時確實是有這個包的,刪除原numpy包,重新安裝即可成功引用。

為了能夠方便的執行python程序,我直接將python程序拷貝到C++項目目錄下,如圖:

 

此時通過設置相對路徑則可查找到目標文件。

 

下面的PyImport_ImportModule函數是找到需要執行的文件,PyObject_GetAttrString函數是找到文件中需要執行的函數(一般的情況下,我們在python中都是執行一個主函數,但是在C++中是無法直接調用主函數的,此時可以將主函數中的所有語句調出,拷貝到一個新的函數中,在C++中調用這個新的函數即可)。Py_BuildValue函數是設置調用的python函數的形參。PyObject_CallObject函數是接受python執行程序的返回值。我的python程序新建函數如下:

 

注明:如果不需要傳遞參數的話或者無返回值的話也無所謂,這個就是一個語法,簡單設置一下即可。

 

最后,最難調的一個bug:

所有網上的教程都是調用一個python文件中一個函數,沒有關聯關系,但是在實際的項目中,我們的一個python文件關聯了其他python文件和不同各種各樣的包,我們需要通過一個函數將所有的這些運行起來,解決辦法如下:

 

C++文件中,對你引用的函數,包進行一一測試,直到所有的包,函數都測試通過,此時整個程序即可正確運行。

 

我的程序正確運行展示:

C++運行如下

 

Python程序運行如下

運行結果相同,C++調用python成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM