pyinstaller打包exe(32位和64位)和執行太慢等問題解決
pyinstaller打包exe(32位和64位)和執行太慢等問題解決
文章目錄
前言
因為涉及到需求,因此筆者研究很久的python打包exe,目前有很多打包方法例如py2exe,pyinstaller,cx_Freeze,nuitka對python檔案進行打包成可執行檔案。但目前最常用而已也是最好用的是pyinstaller,因此筆者就來簡單介紹下pyinstaller的使用和遇到的一些坑
一、pyinstaller的安裝
- pyinstaller是python直接可以呼叫的一個包,直接在cmd裡pip install pyinstaller即可,目前pyinstaller支援的python版本為3.5-3.8,即3.5以上的任何python版本都能直接pip安裝使用pyinstaller。
- pyinstaller -v檢視是否安裝成功
二、pyinstaller使用介紹
引數 | Value |
---|---|
-F,-onefile | 產生單個的可執行檔案 |
-D,–onedir | 產生一個目錄(包含多個檔案)作為可執行程式 |
-a,–ascii | 不包含 Unicode 字符集支援 |
-d,–debug | debug 版本的可執行檔案 |
-w,–windowed,–noconsolc | 指定程式執行時不顯示命令列視窗(僅對 Windows 有效) |
-c,–nowindowed,–console | 指定使用命令列視窗執行程式(僅對 Windows 有效) |
-o DIR,–out=DIR | 指定 spec 檔案的生成目錄。如果沒有指定,則預設使用當前目錄來生成 spec 檔案 |
-p DIR,–path=DIR | 設定 Python 匯入模組的路徑(和設定 PYTHONPATH 環境變數的作用相似)。也可使用路徑分隔符(Windows 使用分號,Linux 使用冒號)來分隔多個路徑 |
-n NAME,–name=NAME | 指定專案(產生的 spec)名字。如果省略該選項,那麼第一個指令碼的主檔名將作為 spec 的名字 |
Column 1 | Column 2 |
---|---|
centered 文字居中 | right-aligned 文字居右 |
這裡常用的為-F 和-D,
專案結構:
- cmd到當前專案路徑
- pyinstaller -F xxx (xxx為專案主程式)
- 等待執行結束專案中多了幾個檔案dist、build和main.spec,我們需要的exe檔案在dist裡
- pyinstaller -D xxx (這個是打包出多個檔案,而不是隻有一個可執行檔案,執行的時候每個檔案都不能少,特點:檔案小,執行速度快。缺點:檔案多)
- 打包結果
三、打包32位和64位exe
在許多場景可能會用到32位的exe,因此需要打包32位的exe,當然取決於python的版本環境了,python如果是32位的那麼打包出來的exe也是32位的,64位同理。為了方便我們使用anaconda(anaconda安裝和使用教程)建立虛擬環境來打包32位exe。
-
先搭好好32位python環境和安裝各種需要的包
-
檢視是否位32位python環境
-
輸入pyinstaller打包即可
-
把打包好的exe檔案用記事本開啟,如果沒有這種開啟方式那就直接開啟一個記事本,然後把exe檔案拖到記事本,用文字編輯器開啟(以UTF-8編碼),搜尋關鍵詞PE(PEL對應32位,PEd對應64位)
一個32位的exe就打包好了
四、打包的exe檔案太大的問題
一個就只有幾十行程式碼的程式,打包出來竟然有300多MB,這完全超出了我們的,查了很多資料才知道,pyinstaller會把python環境中的很多專案沒有用到的包都一起打包進去,這樣就增大了exe的大小了,
解決方法:
使用anaconda建立一個單獨乾淨的虛擬環境,然後在這個單獨環境裡安裝相應的需要用到的包,然後對專案進行打包,這就是我們前幾篇文章提到的為啥要用anaconda的原因,方便我們管理每個專案的Python環境和對呀的包,幾乎都要坐到每個專案單獨對呀一個虛擬環境。這樣打包出來就只有10MB左右
五、打包的exe檔案啟動執行太慢
在大多數的情況下,我們的專案是很大的,不僅僅是隻有幾十行程式碼而已。當我們pyinstaller -F xxx打包成單一的exe檔案後會遇到一個問題,就是明明在程式裡執行瞬間就啟動了,然而執行exe檔案的時候卻發現執行的很慢,幾乎要1、2分鐘左右才會開始啟動執行程式碼。那是因為:
-D:生成一個資料夾,裡面是多檔案模式,啟動快。
-F:僅僅生成一個檔案,不暴露其他資訊,啟動較慢。
我們都是隻想要一個檔案,而不想看到太多的附帶檔案,如何即想要單一檔案執行,又加快執行速度呢
解決方法:
- 使用pyinstaller -D xxx 打包,生成一個資料夾
- 使用Enigma Virtual Box.exe這個資料夾裡的檔案進行重新打包
百度網盤:https://pan.baidu.com/s/1uX6pH-MS9a4KLEbLvxcsZA
提取碼:ppsg - 把資料夾下的所有檔案(除開xxx.exe檔案#即主程式的exe檔案,我這裡是companyid.exe)拖進這個軟體裡直接點確定即可,這個不影響
- 選擇主程式檔名稱
- 點選打包即可在資料夾下看到最後打包好的companyid_boxed.exe
- 最後把這個檔案取出來即可,其他的檔案都可以刪除掉,這樣就解決了單一可執行檔案exe執行太慢的問題。
總結
筆者每天都在不斷填坑,希望讀者可以用到,可以給讀者帶來作用是筆者每天不斷填坑的動力,最後祝讀者早日脫坑!
相關文章
- pyinstaller 生成 exe 的閃退問題解決方案
- PyInstaller打包Python程式為exePython
- python pyinstaller打包的exe 反編譯問題記錄 破解加密Python編譯加密
- pyinstaller 打包 exe 程式步驟和新增依賴檔案方法
- python2 反編譯pyinstaller打包的可執行exe檔案Python編譯
- 使用pyinstaller打包exe檔案教程
- pyinstaller打包python成.exe檔案Python
- 解決:如何將Python程式碼打包成exe可執行程式的問題Python行程
- 使用PyInstaller打包檔案為exe程式
- 請問 有沒有遇到過 pyinstaller 打包成 exe 去掉 doc 視窗執行不成功,不去掉可以正常執行?
- pyinstaller閃退問題解決方法
- pyinstaller打包pytest+allure框架的程式碼後,執行時exe: error: unrecognized arguments: --alluredir框架ErrorZed
- 使用 pyinstaller 打包 py 檔案成 exe 程式
- Pyinstaller打包Pytorch框架所遇到的問題PyTorch框架
- Pyinstaller打包pikepdf失敗的問題排查
- 從cmake解決clion編譯生成的可執行檔案(.exe)不可執行的問題編譯
- iis和tomcat同時執行,完美解決80埠衝突問題Tomcat
- 把可執行jar打包成exe檔案JAR
- Python 打包 windows 可執行的 exe 檔案PythonWindows
- nodejs打包問題解決例項NodeJS
- pyinstaller打包cx_Oracle庫問題處理記錄Oracle
- 解決jenkins執行磁碟滿的問題Jenkins
- 執行 shell 指令碼 \r 問題解決指令碼
- Pyinstaller打包exe的反編譯——LitCTF 2024(公開賽道)ezpython!!!!!編譯Python
- 執行 valet 提示 sudo 問題和 undefined function Valet\collect () 錯誤的解決辦法UndefinedFunction
- mysql執行truncate drop 時卡死問題解決MySql
- Python執行緒安全問題及解決方法Python執行緒
- 一行命令解決Vue和React打包部署上線VueReact
- 解決Android studio中gradle依賴下載太慢的問題AndroidGradle
- RocetMQ搭建攻略和問題解決之道MQ
- Sqlserver並行等待CXPACKET、CXCONSUMER問題的解決思路和案例SQLServer並行
- 【python】打包神器--pyinstallerPython
- Python---pyinstaller打包Python
- matlab編譯exe問題具體解決辦法Matlab編譯
- 多執行緒的安全問題及解決方案執行緒
- DMAIC如何作為解決問題的方法執行?AI
- 解決eslint空格報錯等問題EsLint
- Java多執行緒和併發問題集Java執行緒