為了提高工作效率,需要一個可以自動生成多份相關聯(lián)的word文檔免去繁瑣復制粘貼工作的軟件。最后選定使用QT C++做界面和主要邏輯程序設計,對word的操作使用python寫好對應的函數(shù),然后在QT中調用自己寫好的python函數(shù)完成相應的功能。由于這是第一次使用python 也是第一次將python嵌入QT中使用所以心中有以下幾個疑慮: 1.Python是如何操作word文檔的 2.QT中如何使用Python函數(shù) 3.按照QT程序的發(fā)布流程發(fā)布,是否會不兼容Python 使得軟件無法運行
對于如何使用python和如何在QT中調用pthon網上已經有許多寫的很好的文章了,這里會放上我學習參考的文章鏈接。本篇隨筆主要記錄,探討在QT中調用python語言后的軟件發(fā)布。 一.Python如何操作word文檔 Python操作word文檔我使用了docx模塊 教你怎么使用Python對word文檔進行操作 : https://blog.csdn.net/wcg541/article/details/100999756
基本知道怎么使用docx模塊之后個人感覺參考官方文檔會更適合自身的開發(fā)。 Python docx: https://python-docx./en/latest/
二.QT中如何調用Python函數(shù) QT中使用C++調用python: https://www.cnblogs.com/shenghl/p/4442528.html
常見問題: https://blog.csdn.net/herr_kun/article/details/84570258
三.QT調用Python后如何發(fā)布程序 按照上面的兩個文章代碼的主要功能都實現(xiàn)的差不多了,這時候心里開始擔心這次QT C++程序內調用了另外的一種語言,使用QT的windeployqt.exe發(fā)布程序只包含了QT所需要的環(huán)境對于Python的環(huán)境并沒有打包,這樣會導致在沒有安裝Python的電腦上無法運行。把網上的文章基本都看過一次之后還是沒能解決,最終結合了多篇文章的做法自己又摸索了幾天終于解決了在裸機上無法運行的問題。下面先講講發(fā)布的流程:
1.制作python環(huán)境文件夾 1.本次開發(fā)使用python3.7。首先新建一個文件夾,命名為 “Python37”。
2.打開python安裝目錄如下:
3.復制文件夾內的所有.dll文件,DLLs,include,Lib,libs 文件夾到第一步新建的Python37文件夾內,復制好后如下圖:
4.將Python37文件夾復制到QT的release文件夾下(就是那個名字很長的文件夾)如下圖:
2.在C++代碼中使用 Py_SetPythonHome 函數(shù)指定python庫 解釋器的路徑 Py_SetPythonHome((wchar_t *)(L"./Python37"));
Py_Initialize();
if ( !Py_IsInitialized() )
{
printf("Cant Py_IsInitialized !\n");
return ;
}
在調用python相關函數(shù)之前,先使用 Py_SetPythonHome((wchar_t *)(L"./Python37")) 指定好Python的庫和解釋器的位置。這里寫的是在當前目錄下的Python37文件夾(網上的文章用的是壓縮包,我嘗試使用壓縮包出錯,并且python37文件夾和python37壓縮包放在一起還會導致python37文件夾找不到)。 如果沒有將第一步制作的Python37文件夾放對位置或者Python37文件夾有問題編譯會報錯。
3.使用windeployqt.exe打包QT 這個操作在網上也是有很多文章這里就不具體講了 https://blog.csdn.net/Zhenggenno_1/article/details/80459066
4.拷貝相關文件到發(fā)布好的QT文件夾中 在第3步中我生成了demo1.2文件夾,將我們第一步制作好的Python37文件夾,程序中使用到的.py文件以及Python37中的python3.dll python37.dll文件一起復制到demo1.2文件夾內。如下圖,圈出的是需要復制到demo1.2中的文件: 至此,打包完成。
四.小結 1.使用Py_SetPythonHome 函數(shù)將python的庫和解釋器指定路徑必不可少,之前按照網上很多方法都沒有提及Py_SetPythonHome 函數(shù)的使用,如果在調試階段Py_SetPythonHome 函數(shù)的傳參可以設置為python的安裝目錄。 2.本次使用的打包方法(制作Python37文件)缺點在于文件夾較大,網上有說使用Pyinstaller和py2exe先發(fā)布python程序發(fā)布后會生成dis文件夾和base_library壓縮包代替這里制作的Python37文件夾,但是我始終沒成功。 3.PyImport_ImportModule突然報錯時,檢查下.py文件是否有問題(有可能修改后多了空格之類的導致.py文件編譯不過)。 參考: https://blog.csdn.net/spygg/article/details/104738799 https://blog.csdn.net/qq_34510308/article/details/83621237
|
|