時間:2018年10月20日html
筆者最近在作Qt方面的開發工做,需用到腳本程序對程序內部進行擴展,就很天然的想到了PythonQt,下面介紹PythonQt在Windows下的的安裝編譯心得,水平有限,文筆粗鄙,請諒解。python
本機環境:linux
一、win7 64 旗艦版c++
二、Qt 5.11.2(MSVC 2015,32 bit)編程
三、Python 3.7.0 (32-bit)windows
四、PythonQt 3.2
api
準備工做:框架
一、安裝最新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 ui
二、PythonQt是發佈在Sourceforge上的一款開源的鏈接Qt與Python的框架,主頁地址http://pythonqt.sourceforge.net ,目前更新到版本3.2,直接下載連接:https://sourceforge.net/projects/pythonqt/files/latest/download,下載後解壓。
三、下載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工程並編譯的過程:
一、目錄結構以下圖
二、將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,修改先後比對以下圖所示:
三、修改文件PythonQt3.2\build\python.prf的內容,要根據python的版本號和安裝路徑進行修改,修改先後比對,以下圖所示:
四、修改文件PythonQt3.2\build\PythonQt.prf的內容,添加python_version,爲何python.prf中定義的變量python_version很差用,我也不清楚。修改先後比對,以下圖所示:
五、修改文件PythonQt3.2\build\PythonQt_QtAll.prf的內容,一樣添加python_version,修改先後比對,以下圖所示:
六、修改PythonQt3.2\src\src.pro 文件內容,添加python_version,修改先後比對,以下圖所示:
七、右鍵管理員身份運行PythonQt3.2\createSolution.bat(管理員權限不是必須,這裏只是習慣),運行結束後,會自動關閉cmd窗口,此時目錄中會多出一個PythonQt.sln,目錄結構以下圖所示:
八、使用vs2015打開PythonQt.sln,修改目標文件名爲PythonQt-Qt5-Python37,根據python的版本和安裝路徑,設置PythonQt-Qt5-Python37工程屬性,即添加python的include和lib目錄,以下圖所示:
十、根據python的版本和安裝路徑,設置PythonQt_QtAll-Qt5-Python37工程屬性,即添加include和lib目錄,以下圖所示:
連接器\輸入,第一行是下面這樣的(批處理自動生成的,這裏只是進行覈查),說明前面修改prf文件,而且運行批處理的過程基本正確
十一、右鍵,前後編譯①②,②須要①工程生成的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.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下的編譯 http://www.javashuo.com/article/p-wpfdfsof-eb.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混合編程 http://www.javashuo.com/article/p-vqtxycmx-eg.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! http://www.javashuo.com/article/p-amavrypp-ds.html
QT中 使用c++調用 python http://www.cnblogs.com/shenghl/p/4442528.html
Qt+Python混合編程 http://www.javashuo.com/article/p-rzgriwaj-nb.html