前言: 由於項目的需求需要在開發的上位機上調用python腳本
項目需求:QT需要調用python的腳本進行開發,但是開始入門的時候按照網上的教程進行一個簡單的hello程序都會出錯,下面來記錄一下。
位數的坑:
首先因為做的項目要調用一個儀器的動態鏈接庫,而那個動態鏈接庫的位數是32位的,並且是VS編譯生成的,所以我選的QT就是MSVC32位編譯器,這就導致了后面的問題。大家知道我們的電腦一般都是64位的,64位的電腦可以安裝32位也可以安裝64位的,但是安裝64位的軟件運行效率會更高,所以當我用python做開發的時候,我就選擇了64位的anaconda安裝包,所以安裝的python的庫也都是64位的,所以我導入python的lib靜態庫時就一直導不進去,但是顯示編譯並沒有什么錯誤。所以如果你想要QT調用你的python程序,那么你的py程序必須是32位的,那么接下來就得下載32位的anaconda了,下載好了,又出現了一個問題,也就是TensorFlow只支持64位的(官網上可以看到),所以你怎么安裝TensorFlow都安裝不上,這下子就GG了。
所以我們怎么安裝:(anaconda + QT 5.8(MSVC64) win7)
推薦一種安裝方式: 如果你在Windows開發,並且你用python可能會做一些更加高級的事情,比如調用tensorflow numpy等進行一些開發,這時候推薦的安裝: python肯定要裝64位的,因為要有TensorFlow,那么QT就也要裝64位的,這個64指的是編譯器是64位的,並不是說軟件是64位的,只要編譯器對了就行。
回到主題:QT調用python腳本(簡單的hello)---新建的項目是 控制台項目
坑1、首先是.py程序的名稱,別命名為test.py,會和python定義的重復的,隨便都想,就是別用這個名字,否則不管你里面寫什么函數一律找不到,以為它壓根讀到的就不是這個文件。
坑2、加上: Py_SetPythonHome((const wchar_t *)(L"D:/anaconda")); 這句話,否則你會看到這樣的error:modulenotfounderror: no module named 'encodings' ,不是編碼的問題,就是沒找到你python的根目錄
坑3、怎么導入靜態庫: Pro文件下右鍵--添加庫--然后外部庫--然后看圖--

坑4、如果提示你找不到 python37_d.lib 怎么辦
那就把libs文件夾下的python37.lib文件,重新拷一份回來並且重命名為python37_d.lib就行了
坑5、提示打不開python.h文件
首先你導入庫正確了,就像第三條說的那樣做就行,接下來是這里的問題: 你只需要更改下構建的路徑就行了,或者更簡單的直接將對號去掉構建在當前工程同一個文件夾下。

坑6、當你做完第五步,你會發現尼瑪還有問題,提示的error:error: expected unqualified-id before ';' token
將error展開說是在python中的object.h文件中的slots沖突,天哪,發生了什么?解決吧
原因:由於QT中定義了slots作為關鍵了,而python3中有使用slot作為變量,所以有沖突

坑7、 你還要將你的.py文件放在和QT的EXE文件在同一目錄下,否則還會持續報錯
坑8、編譯都通過但是沒有信息輸出,比如:你調用的.py文件中的hello函數,函數要print(“hello world”),進行build之后,控制台沒有輸出,這句話貌似沒有運行,怎么辦?先嘗試下單步進入(調試模式下),應該會出現 “the CDB process terminated”,這個原因應該就是沒有找到相應的動態庫也就是.dll文件,我也是很不理解,將anaconda文件夾下的python36.dll文件拷貝到libs文件夾下就解決這個問題了
坑9、當直接運行build之后的.exe文件,有時候會出現這個error:無法啟動此程序因為計算機丟失qt5core.dll 。並不是因為我們沒有這個文件,因為沒有添加到相應的路徑;解決辦法:在 path壞境變量 中添加路徑:
我的是:D:\QT5.8\5.8\msvc2010_64l\bin;D:\QT5.8\Tools\QtCreator\bin
坑10、在安裝anaconda時,有一個地方一定要兩個勾都打上,將路徑添加到響應的path路徑中去,不然就會出現 2 中的問題。
如果你忘記了打鈎:記得在 用戶變量的path (不是系統變量)中添加以下路徑:D:\Anaconda3;D:\Anaconda3\Library\mingw-w64\bin;D:\Anaconda3\Library\usr\bin;D:\Anaconda3\Library\bin;
坑11、比如在py文件中import numpy 導入第三方模塊時,就會出現打不開對應的文件,這還是路徑配置的問題,具體的看坑10 ,按照坑10 的配置 numpy tensorflow都可以正常的進行導入。
參考:
https://blog.csdn.net/yinyuchen1/article/details/77775851
https://blog.csdn.net/lacoucou/article/details/78090603
https://blog.csdn.net/A18373279153/article/details/78745084
https://blog.csdn.net/weixin_37805972/article/details/80355473
————————————————
版權聲明:本文為CSDN博主「herr_kun」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/herr_kun/article/details/84570258
