小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

在QT C++中調(diào)用 Python并將軟件打包發(fā)布(裸機(jī)可運(yùn)行)

 怡紅公子0526 2021-05-03

      為了提高工作效率,需要一個(gè)可以自動(dòng)生成多份相關(guān)聯(lián)的word文檔免去繁瑣復(fù)制粘貼工作的軟件。最后選定使用QT C++做界面和主要邏輯程序設(shè)計(jì),對(duì)word的操作使用python寫(xiě)好對(duì)應(yīng)的函數(shù),然后在QT中調(diào)用自己寫(xiě)好的python函數(shù)完成相應(yīng)的功能。由于這是第一次使用python 也是第一次將python嵌入QT中使用所以心中有以下幾個(gè)疑慮:

1.Python是如何操作word文檔的

2.QT中如何使用Python函數(shù)

3.按照QT程序的發(fā)布流程發(fā)布,是否會(huì)不兼容Python 使得軟件無(wú)法運(yùn)行

 

對(duì)于如何使用python和如何在QT中調(diào)用pthon網(wǎng)上已經(jīng)有許多寫(xiě)的很好的文章了,這里會(huì)放上我學(xué)習(xí)參考的文章鏈接。本篇隨筆主要記錄,探討在QT中調(diào)用python語(yǔ)言后的軟件發(fā)布。

一.Python如何操作word文檔

  Python操作word文檔我使用了docx模塊

  教你怎么使用Python對(duì)word文檔進(jìn)行操作 :

    https://blog.csdn.net/wcg541/article/details/100999756

 

  基本知道怎么使用docx模塊之后個(gè)人感覺(jué)參考官方文檔會(huì)更適合自身的開(kāi)發(fā)。

  Python docx:

     https://python-docx./en/latest/

 

 

二.QT中如何調(diào)用Python函數(shù)

    QT中使用C++調(diào)用python:

    https://www.cnblogs.com/shenghl/p/4442528.html

 

   常見(jiàn)問(wèn)題:

    https://blog.csdn.net/herr_kun/article/details/84570258

 

三.QT調(diào)用Python后如何發(fā)布程序

  按照上面的兩個(gè)文章代碼的主要功能都實(shí)現(xiàn)的差不多了,這時(shí)候心里開(kāi)始擔(dān)心這次QT C++程序內(nèi)調(diào)用了另外的一種語(yǔ)言,使用QT的windeployqt.exe發(fā)布程序只包含了QT所需要的環(huán)境對(duì)于Python的環(huán)境并沒(méi)有打包,這樣會(huì)導(dǎo)致在沒(méi)有安裝Python的電腦上無(wú)法運(yùn)行。把網(wǎng)上的文章基本都看過(guò)一次之后還是沒(méi)能解決,最終結(jié)合了多篇文章的做法自己又摸索了幾天終于解決了在裸機(jī)上無(wú)法運(yùn)行的問(wèn)題。下面先講講發(fā)布的流程:

 

  1.制作python環(huán)境文件夾

    1.本次開(kāi)發(fā)使用python3.7。首先新建一個(gè)文件夾,命名為 “Python37”。

 

    2.打開(kāi)python安裝目錄如下:

    

 

 

    3.復(fù)制文件夾內(nèi)的所有.dll文件,DLLs,include,Lib,libs 文件夾到第一步新建的Python37文件夾內(nèi),復(fù)制好后如下圖:

    

 

    4.將Python37文件夾復(fù)制到QT的release文件夾下(就是那個(gè)名字很長(zhǎng)的文件夾)如下圖:

    

 

 

    2.在C++代碼中使用 Py_SetPythonHome 函數(shù)指定python庫(kù) 解釋器的路徑

    Py_SetPythonHome((wchar_t *)(L"./Python37"));
    Py_Initialize();
    if ( !Py_IsInitialized() )
    {
        printf("Cant Py_IsInitialized !\n");
        return ;
    }

    在調(diào)用python相關(guān)函數(shù)之前,先使用 Py_SetPythonHome((wchar_t *)(L"./Python37")) 指定好Python的庫(kù)和解釋器的位置。這里寫(xiě)的是在當(dāng)前目錄下的Python37文件夾(網(wǎng)上的文章用的是壓縮包,我嘗試使用壓縮包出錯(cuò),并且python37文件夾python37壓縮包放在一起還會(huì)導(dǎo)致python37文件夾找不到)。

  如果沒(méi)有將第一步制作的Python37文件夾放對(duì)位置或者Python37文件夾有問(wèn)題編譯會(huì)報(bào)錯(cuò)。

  

  3.使用windeployqt.exe打包QT

   這個(gè)操作在網(wǎng)上也是有很多文章這里就不具體講了

   https://blog.csdn.net/Zhenggenno_1/article/details/80459066

 

  4.拷貝相關(guān)文件到發(fā)布好的QT文件夾中

  在第3步中我生成了demo1.2文件夾,將我們第一步制作好的Python37文件夾,程序中使用到的.py文件以及Python37中的python3.dll python37.dll文件一起復(fù)制到demo1.2文件夾內(nèi)。如下圖,圈出的是需要復(fù)制到demo1.2中的文件:

  

   至此,打包完成。

 

四.小結(jié)

  1.使用Py_SetPythonHome 函數(shù)將python的庫(kù)和解釋器指定路徑必不可少,之前按照網(wǎng)上很多方法都沒(méi)有提及Py_SetPythonHome 函數(shù)的使用,如果在調(diào)試階段Py_SetPythonHome 函數(shù)的傳參可以設(shè)置為python的安裝目錄。

  2.本次使用的打包方法(制作Python37文件)缺點(diǎn)在于文件夾較大,網(wǎng)上有說(shuō)使用Pyinstaller和py2exe先發(fā)布python程序發(fā)布后會(huì)生成dis文件夾和base_library壓縮包代替這里制作的Python37文件夾,但是我始終沒(méi)成功。

  3.PyImport_ImportModule突然報(bào)錯(cuò)時(shí),檢查下.py文件是否有問(wèn)題(有可能修改后多了空格之類(lèi)的導(dǎo)致.py文件編譯不過(guò))。

參考:

https://blog.csdn.net/spygg/article/details/104738799

https://blog.csdn.net/qq_34510308/article/details/83621237

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多