PythonPyqt5項目開發完成后如何使用pyinstaller打包——以Pycharm編輯器為例(目前為止最正確的版本,成功打包日期為2020.11.26)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈

最近用Python開發了一個可視化界面,開發過程如魚得水,幾乎沒有BUG出現(項目簡單)。但是在臨近交付時發現,打包這個項目有點令人發愁。不過,一切難題最終被我“斬于馬下”(踩過眾多坑的我,今天就給大家重現一下我是怎么掉進坑里的!)

為了方便大家閱讀,我先介紹打包過程,然后再介紹我出現的問題和打包心得:

一、打包

能看到這篇博問的同學想必是通過百度搜索pyinstaller如何打包Python項目、Python程序、Pyqt5程序進來的,那么我們就不多介紹pyinstaller這個打包程序了。在這次打包過程中,我使用的pyinstaller版本為4.0,而不是最新的4.1版本(實踐過程中覺得pyinstaller4.1版本有坑,天坑!)

第一步? 安裝pyinstaller 4.0

使用Terminal或者在Setting->Project Interpreter添加:

1、? ?Terminal方法:需要輸入的命令行如下所示

pip install pyinstaller==4.0

2、Setting->Project Interpreter中設置

第二步 拷貝主程序到項目文件的Lib路徑下

主程序就是指明整個項目是從哪開始運行的程序,尤其是包含下圖代碼的,那一定是主程序了(你自己寫的代碼,主程序是哪個py文件你還不知道?)。那么就有好奇寶寶問了,我自己的主程序在原來位置好好的,為什么還需要復制到項目文件的Lib路徑下?這是因為Lib文件下的site-packages里有我們的pyinstaller,我們在使用該工具時,得讓他找的到我們要打包的程序。如下圖所示,我已經把main_code.py復制到Lib文件夾里了。(是Lib文件夾,不是Lib、site-packages)如果你為自己的程序設計了圖標,同樣的道理,把圖標文件(****.ico)也要復制到Lib文件目錄下。

? ? ? ?? ? ?

第三步 在Pycharm的Terminal中執行打包命令? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

打開Pycharm的Terminal,并進入到lib目錄下,使用的命令為:“cd lib”,如下圖所示:

接下來,開始我們的打包,需要的打包命令有兩種,分別有不同的效果,建議大家按照我介紹的順序都用一下,先介紹第一種,其中有-D和-i選項,:

pyinstaller -D main_code.py -i cat.ico

-D:打包 Python 程序為一個文件夾
-i:生成圖標,只適用于 Windows 平臺(沒有圖標就不用加“-i cat.ico”)

? ? ? ?使用這個打包命令打包好的程序在運行時會出現“窗口控制臺”黑框,如下圖所示。如果你的代碼無法正常運行(在Pycharm里可以運行,不代表打包后的exe程序可以流暢運行),窗口控制臺就會出現錯誤提示,也相當于一個DeBug的過程。所以,在此我建議打包程序的同學,先運行這個命令,等到一切正常后,再使用第二類“命令”。值得注意的是,如果打包好的程序無法順利運行,這個黑框就會一閃而過,我們根本看不清錯誤提示。我也遇到了這個問題,我使用錄頻軟件,錄制了整個過程,放慢速度后才看清錯誤提示,最終解決了BUG。以下是打包命令從輸入到打包成功的Terminal截圖,由于項目路徑不同,所以僅供參考!打包完成后,有一些程序需要讀取的文件比如Excel文件、圖片等,一定要把這些文件全部復制到“dist\main_code”文件里。我打包好的exe程序位置是“\Lib\dist\main_code\main_code.exe”,所以我將程序所需要的文件都放在了和“main_code.exe”相同的目錄下。大家可以以我為例,對照著操作。對了,我使用的是相對路徑。另外,如果按照我介紹的步驟進行打包,就不要再參考其他的資料或者書籍了,防止不兼容。

第二種命令:

pyinstaller --noconsole -D main_code.py -i cat.ico

其中--noconsole就是取消“窗口控制臺”黑框的命令選項,這個命令是等到程序一切正常后才使用的。所以我先前就說了,一定要按照我介紹的順序打包兩次,這樣才可以保證打包的成功率。下圖是使用第二種命令打包成果的Terminal截圖。

同理,也需要將exe程序所需要的圖片、excel等文件復制到和exe同樣的目錄下。

二、踩過的坑


1、部分模塊版本高,無法兼容或自身存在BUG。

出現問題的模塊或包為:Pyqt5、pyinstaller、sumpy。在主程序開頭,我已將上述中的二者導入(pyinstaller是打包工具,不是環境),但是在運行時,總是報錯,其中就包含numpy1.19.4。如果你也出現與numpy相關的報錯信息并且環境恰好是1.19.4的版本,那么我建議你使用如下命令降低numpy版本。

先卸載原先的1.19.4版本,在Terminal里輸入以下命令:

pip uninstall numpy==1.19.4

隨后安裝低版本 1.19.3

pip install numpy==1.19.3

或者也可以在Pycharm的Setting里修改,用減號移除包,用加號增加所要的包。如下圖1、圖2所示,可進行包的增刪以及包版本的選擇。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2

Pyqt5也出現了問題,我仿照numpy的處理方式降低了版本,打包程序就運行的順暢多了。pyinstaller也是同樣的道理。

2、自身代碼問題

我使用的編輯器是Pycharm,運行代碼時沒有任何問題,打包也打包成功了,就是在運行exe文件時提示“exit”沒有聲明。我反復觀察代碼,后來是發現代碼里有一處使用“exit”不規范導致的,更改后,重新打包,exe程序成功運行!所以就如我上面說的,編譯器不報錯,不代表打包成功后的程序能順利運行。

3、與程序相關的文件(如圖片、Excel文件等)

?上文也提到,在打包完成后,要把相關文件全部放入與可運行程序同一目錄文件夾下,如果你依賴的文件在打包之前就在一個文件夾A里,那么把A復制,粘貼到與exe程序同一文件夾“dist”內。與路徑相關的還有在編寫代碼時使用的是相對路徑還是絕對路徑,我這里使用的是相對路徑。

4、打包程序只需要打包主程序

打包主程序即可,打包軟件自動會把依賴的模塊或包打包進去,比如我在此次開發過程中用了Pyqt5。pyinstaller打包main_code.py時,自動將Pyqt5等模塊打包進去,無需我們一一指定。?

5、一條道走到黑

?在踩坑過程中,我試驗了百度、CSDN上能查到的各種方法,不同情況使用的命令不同,程序所需文件復制到的位置也不同,大腦一片混亂。我在打包過程中還在思索,就一個簡簡單單的打包過程為啥這么復雜,網上教程為何都不適用,但是功夫不負有心人,我最終打包成功!所以,大家千萬不要像我一樣(東拼西湊),靜下心來,把我這篇文章看完,一步一步去打包。打包成功了“收藏、關注、點贊、轉發”,打包不成功,你私信我,我盡量幫助你解決問題。

最后附上我使用Python模塊的版本搭配,希望對大家起到一個參考的作用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531074.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十一、Python第十一課——用戶輸入和另一種循環(While)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 學了這么久的Python,大家肯定會好奇,不是說機器學習嗎?不是人機交互嗎?不是人工智能嗎?怎么我學了Python都十…

如何讓新創建的Python文件自動生成作者信息等內容(以Pycharm為例)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 打開Pycharm軟件后,點擊“File”,然后點擊“Settings”,就會出現下面截圖界面:然后按照箭頭所指,在對應位置…

如何將谷歌瀏覽器的背景色(包括顯示的網站界面等)全部調為黑色?2020.12.28

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 因為電腦顯示器正對窗戶的原因,平時為了透氣通風不能使用遮光簾,所以我將整個電腦的所有軟件的主題色設為黑色,這樣能降低一些光的…

Windows 10如何消除文件夾右上角的“相對箭頭”?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 整理筆記本電腦時發現&#xff0…

目標檢測第1步:如何在Windows 10下安裝MiniConda?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 目錄 一、Conda是什么&#xff…

十二、Python第十二課——函數

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 (請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 目錄 (請先看置頂博文&#xff…

目標檢測第2步:如何在Windows 10下安裝Anaconda?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 想要學習目標檢測的朋友可能會發…

目標檢測第3步:如何在Windows 10系統下安裝CUDA(更新時間2022.03.22)

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 目錄 一、自檢 1、查看PC是否…

目標檢測第5步:如何在Windows 10系統下,搭建YOLOv5(5.0)環境?保姆級,沒有人比這個更詳細了(更新時間2022.3.22)

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 目錄 一、安裝Anaconda或Minic…

導入自己寫的類,卻被標紅,原因及解決方法是?(Pycharm編輯器為例)

(請先看這篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 如果看完這篇博文,你的問題還是沒有解決,那么加我的公眾號,后臺發消息給我吧!當天回復&#xff01…

如何將Word與Endnote再次相互關聯?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 Endnote是每一個科研人員都接觸…

十三、Python第十三課——類(包含對類的相關概念的理解,這一文的附錄讓你徹底明白類和對象)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 (請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 一、類和對象 1、類 2、對象 二、類的創建和實例…

十四、Python第十四課——文件和異常

(請先看這篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 如果看完這篇博文,你的問題還是沒有解決,那么請關注我的公眾號,后臺發消息給我吧,當天回復&#x…

目標檢測第6步:YOLOv5(5.0)如何在Colab中訓練自定義數據集?(更新時間:2022.3.22)

(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客) 如果看完這…

十五、Python第十五課——測試代碼

(請先看這篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 也許你聽過軟件測試?編寫函數或類時,可以為其編寫對應的測試代碼。通過測試,可檢驗代碼是否能夠按照編寫意圖工作。在…

Windows 10環境下如何安裝CMake?(更新時間:2021.9.13)

(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客) 1、下載Cmake 下…

Windows 10環境下AndroidStudio安裝教程(內含如何配置Http Proxy)

(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客) 一、AndroidStudi…

如何將Android Studio卸載的干干凈凈?

(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客) 1、打開控制面板&…

英文輸入的字母間距變大,如何調回原來的樣子?

使用微軟內置輸入法的時候,我經常會遇到輸入英文字母間距變大的情況。 問題出現原因:間距變大是因為我們的輸入法由原來的“半角”轉換為“全角”。 解決方法:在輸入法設置中修改,或者鍵盤同時敲擊“shift”“space”即可。

Android Studio編譯后運行按鈕還是灰色的解決方法

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 安裝配置好AndroidStudio之后&am…