乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      在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寫好對(duì)應(yīng)的函數(shù),然后在QT中調(diào)用自己寫好的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)有許多寫的很好的文章了,這里會(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ù)和解釋器的位置。這里寫的是在當(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)題(有可能修改后多了空格之類的導(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)買等信息,謹(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)論公約

        類似文章 更多