Windows下PythonQt編譯(vs2015+Qt5.11.2+PythonQt 3.2)探索


時間:2018年10月20日

  筆者最近在做Qt方面的開發工作,需用到腳本程序對程序內部進行擴展,就很自然的想到了PythonQt,下面介紹PythonQt在Windows下的的安裝編譯心得,水平有限,文筆粗鄙,請諒解。

本機環境:

  1、win7 64 旗艦版

  2、Qt 5.11.2(MSVC 2015,32 bit)

  3、Python 3.7.0 (32-bit)

  4、PythonQt 3.2

准備工作:

1、安裝最新Qt5.11.2,地址http://download.qt.io/archive/qt/5.11/ ,直接下載鏈接。

http://download.qt.io/archive/qt/5.11/5.11.2/qt-opensource-windows-x86-5.11.2.exe 

2、PythonQt是發布在Sourceforge上的一款開源的連接Qt與Python的框架,主頁地址http://pythonqt.sourceforge.net ,目前更新到版本3.2,直接下載鏈接:https://sourceforge.net/projects/pythonqt/files/latest/download,下載后解壓。

3、下載Python 3.7.0 主頁地址https://www.python.org/downloads/ ,直接下載鏈接:https://www.python.org/ftp/python/3.7.0/python-3.7.0.exe ,安裝時記得勾選” Add Python 3.7 to PATH”以便注冊環境變量。

生成sln工程並編譯過程:

 1、目錄結構如下圖

2、將PythonQt3.2\createSolution.bat中的內容修改為”C:\Qt\Qt5.11.2\5.11.2\msvc2015\bin\qmake -tp vc -r PythonQt.pro“,自己根據Qt安裝目錄和版本進行調整,這里的qmake一定要是Qt使用的編譯器的,我這里是Vs2015的qmake,改為絕對路徑是因為我電腦上安裝了vc6以及vs多個版本全家桶,環境變量未設置或者相互覆蓋,導致混亂,所以沒有使用官方文檔給出的windows 編譯方法PythonQt Building http://pythonqt.sourceforge.net/Building.html,修改前后比對如下圖所示:

3、修改文件PythonQt3.2\build\python.prf的內容,要根據python的版本號和安裝路徑進行修改,修改前后比對,如下圖所示:

4、修改文件PythonQt3.2\build\PythonQt.prf的內容,添加python_version,為什么python.prf中定義的變量python_version不好用,我也不清楚。修改前后比對,如下圖所示:

 

5、修改文件PythonQt3.2\build\PythonQt_QtAll.prf的內容,同樣添加python_version,修改前后比對,如下圖所示: 

6、修改PythonQt3.2\src\src.pro 文件內容,添加python_version,修改前后比對,如下圖所示: 

 

7、右鍵管理員身份運行PythonQt3.2\createSolution.bat(管理員權限不是必須,這里只是習慣),運行結束后,會自動關閉cmd窗口,此時目錄中會多出一個PythonQt.sln,目錄結構如下圖所示:

8、使用vs2015打開PythonQt.sln,修改目標文件名為PythonQt-Qt5-Python37,根據python的版本和安裝路徑,設置PythonQt-Qt5-Python37工程屬性,即添加python的include和lib目錄,如下圖所示:

10、根據python的版本和安裝路徑,設置PythonQt_QtAll-Qt5-Python37工程屬性,即添加include和lib目錄,如下圖所示:

 

鏈接器\輸入,第一行是下面這樣的(批處理自動生成的,這里只是進行核查),說明前面修改prf文件,並且運行批處理的過程基本正確 

 

11、右鍵先后編譯②需要①工程生成的lib和dll,所以編譯有先后順序。

①PythonQt-Qt5-Python37工程------生成----->PythonQt-Qt5-Python37.dll、PythonQt-Qt5-Python37.lib

②PythonQt_QtAll-Qt5-Python37工程------生成----->PythonQt_QtAll-Qt5-Python37.lib、PythonQt_QtAll-Qt5-Python37.dll

編譯ok后,在PythonQt3.2\lib目錄下,會生成的兩對lib和dll,剩余的工程基本都是依賴它們。

12、剩余的工程基本是些實例,右鍵編譯,如果提示:

  12.1 fatal error C1083: 無法打開包括文件: “Python.h”: No such file or directory,則添加python的include目錄到 附加包含目錄(方法和上面的類似)

  12.2 LINK : fatal error LNK1104: 無法打開文件“python37.lib”,則添加python的libs目錄到 附件庫目錄(方法和上面的類似)

全部編譯成功后,lib文件夾內容:

 

小結:

  使用PyThonQt,比直接使用python api進行交互式編程更加的便利,官方介紹翻譯——”PythonQt是Qt框架的動態Python綁定。它提供了一種將Python腳本語言嵌入C ++ Qt應用程序的簡便方法。PythonQt的重點是將Python嵌入到現有的C ++應用程序中,而不是完全用Python編寫整個應用程序。如果您正在尋找一種將Python對象嵌入C ++ / Qt應用程序並通過Python 編寫應用程序部分腳本的簡單方法, 那么PythonQt就是您的最佳選擇!PythonQt是一個穩定的庫,它是為了使圖像處理和可視化平台MeVisLab可以使用Python腳本而開發的“。

  linux上使用官方文檔中的命令行的方式(文獻中有鏈接),編譯會很順利,但在windows上很費勁,經常因為環境變量或者目錄的問題出錯,這也是使用sln工程編譯,而不是命令行式編譯的原因。但要要注意因為python安裝使用的二進制包,不是使用源碼編譯,所以debug工程編譯不過去的,才有了上面都是Release。官方推薦的做法是,下載python源碼,使用自己電腦上的Qt編譯后,在進行上面類似的操作。

  有2個疑問:為什么python_version的變量不好用,為什么每個prf文件中設置的python的include和libs目錄失效,而是挨個手動修改sln工程屬性如果您了解,望不吝賜教,謝謝。使用這個方法編譯參數會和pythonQt的解壓目錄寫死,編譯成功后,挪動文件夾位置重新編譯就會失敗。

  本文介紹了,使用createSolution.bat生成vs的sln工程,然后編譯的過程。其實直接使用Qt打開PythonQt.pro,添加添加include和lib目錄,也是可行的。為了解決上面的疑問,百度google無果,到官方論壇,找到了答案。bulid下的prf文件開發人員筆誤和一些選項沒設定的關系,因為開發人員只是linux/unix測試,windows沒有經過完整測試,感情官方給出的在window上編譯的方法其實有誤的(文獻1)。官方論壇開發人員早了解到,但是下載包這么長時間也不更新,哎,windows后娘省的

比如:

win32::LIBS += $$PWD/../liPythonQt_QtAll-Qt5-Python$${PYTHON_VERSION}$${DEBUG_EXT}.lib

應該是

win32::LIBS += $$PWD/../lib/PythonQt_QtAll-Qt5-Python$${PYTHON_VERSION}$${DEBUG_EXT}.lib

額。。。說是拼寫錯誤

再就是生成的lib dll 有后綴3,導致別的工程無法找到對應的lib,這是因為沒有設定CONFIG += skip_target_version_ext,因為在unix上不寫沒有這個問題。經過修改后,vs編譯PythonQt不再那么麻煩,呵呵,但是這篇博文寫到這里實在不易,於是決定也給此文加上后綴 - 探索。

重新奉上  《Windows下PythonQt編譯(vs2015+Qt5.11.2+PythonQt 3.2)》希望后來人少走彎路 

 

參考資料/文獻:

PythonQt Building http://pythonqt.sourceforge.net/Building.html

PythonQt Introduction http://pythonqt.sourceforge.net/index.html

將Python嵌入到Qt程序中 https://my.oschina.net/u/2306127/blog/369663 

編譯PythonQt的一點心得 https://blog.csdn.net/x18722498005/article/details/50975481

關於PythonQt3.1在Windows中的編譯 https://blog.csdn.net/wcs20wp/article/details/62216103#commentBox

PythonQt在windows下的編譯 https://www.cnblogs.com/zhangzhiming/p/5407644.html

編譯PythonQt的一點心得 https://blog.csdn.net/x18722498005/article/details/50975481

 QT的pro文件編寫,高效簡潔,,路徑設置 有空格 引入系統環境變量 https://blog.csdn.net/zkl99999/article/details/61197930

PythonQT 3.2 build failing on Windows https://sourceforge.net/p/pythonqt/discussion/631393/thread/45d39c91/

 

PythonQt使用
在Qt(C++)中與Python混合編程 https://www.cnblogs.com/xia-weiwen/p/7932379.html
PythonQt試用手記 https://blog.csdn.net/jingwenlai_scut/article/details/5325448
PythonQt進階 http://www.cnblogs.com/zhangzhiming/p/5409284.html

 

C/C++使用Python API 方式與Python交互

C++調用Python淺析 https://blog.csdn.net/magictong/article/details/8947892
QT C++中直接調用python接口 https://blog.csdn.net/xiranchen/article/details/41843609
Qt與Python的混合編程相關配置以及問題說明 https://blog.csdn.net/chyuanrufeng/article/details/77753733
Qt中使用python--Hello Python! https://www.cnblogs.com/kaikai-king/p/7976339.html
QT中 使用c++調用 python http://www.cnblogs.com/shenghl/p/4442528.html
Qt+Python混合編程 https://blog.csdn.net/qq_29176963/article/details/82776575#_216


免責聲明!

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



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