PyInstaller是一個流行的第三方庫,用于將Python應(yīng)用程序打包成獨立的可執(zhí)行文件(EXE)。它將Python代碼、依賴項和資源文件打包到一個單一的EXE文件中,使得在沒有Python環(huán)境的計算機上運行Python應(yīng)用程序成為可能。本文將詳細介紹如何使用PyInstaller將Python應(yīng)用程序打包成EXE文件,并包含必要的代碼示例。
因為需要發(fā)送安裝包給客戶,PyInstaller構(gòu)建的安裝包不太美觀,無法提供滿足設(shè)計和產(chǎn)品要求的自定義美化界面UI。團隊現(xiàn)在改成使用 Installer Studio 這個軟件來打包了,功能很強大,而且有非常多的安裝模版可以使用。官網(wǎng):https://installerstudio.online

一、簡介
-
python提供了幾個用來打包的模塊,主要有py2app、py2exe、pyinstaller。


- 根據(jù)上面的表可以看出,只有
fbs,cx_Freeze和PyInstaller滿足跨平臺要求,本文以PyInstaller進行打包作為案例,其他兩個大同小異。
二、使用說明
pyinstaller能夠在Windows、Linux、Mac等操作系統(tǒng)下將Python源文件打包,通過對源文件打包,Python程序可以在沒有安裝Python的環(huán)境中運行,也可以作為一個獨立文件方便傳遞和管理。PyInstaller支持Python 2.7和Python 3.3+。可以在Windows、Mac和Linux上使用,但是并不是跨平臺的,而是說要是希望打包成.exe文件,需要在Windows系統(tǒng)上運行PyInstaller進行打包工作;打包成Mac App,需要在Mac OS上使用,Linux也一樣,不能在一端上打另外兩段的包,還有Mac m1的打包不能給Mac intel的使用,相反也一樣,運行會報錯:Error:Bad CPU type in executable。pyinstaller不需要自己寫setup.py文件,只需要在工作目錄中輸入打包命令即可。最后會生成build和dist文件夾,啟動文件在dist文件夾下。安裝
$ pip install pyinstaller
- 安裝后如果有警告
pip版本低了,升級下
WARNING: You are using pip version 22.0.4; however, version 22.3.1 is available.
You should consider upgrading via the '/Users/dengzemiao/.pyenv/versions/3.10.3/bin/python3.10 -m pip install --upgrade pip' command.
$ python -m pip install --upgrade pip
- 升級(
備用)
$ pip install --upgrade pyinstaller
- 切換到工作目錄
$ cd xxxx/xxx
- 打包命令
$ pyinstaller [項目啟動文件]
- 其他參數(shù)(按需求選擇):打包完畢后在
dist文件夾下雙擊項目啟動文件就可以了
-F:表示在 dist 文件夾下只生成單個可執(zhí)行文件(內(nèi)部包含所有依賴),不加默認會在 dist 生成一大堆依賴文件 + 可執(zhí)行文件。
-D:與 -F 相反用法。
-W:表示去掉控制臺窗口,如果你的程序是有界面的,可以不寫這個參數(shù)。但是測試情況下建議先加上這個參數(shù),因為如果打包不成功,運行時報錯信息會在控制臺上輸出,沒有控制臺就看不到報錯信息。
-c:表示去掉窗框,使用控制臺。
-p:表示自己定義需要加載的類路徑,項目中包含多個自建模塊的時候需要加上 -p aaa.py -p bbb.py -p ccc.py。
-i:表示可執(zhí)行文件的圖標(biāo),后面跟圖標(biāo)的路徑(例 -i "icon.icns",Mac 下圖標(biāo)文件為 icns 格式, Win 為ico 格式)。
--name:設(shè)置打包后的應(yīng)用名稱,例 --name "小程序"。
--hidden-import:后面跟模塊名如 queue,用于告訴打包程序某個模塊我用不著你不用打包進去。

常用打包參數(shù)
# -F -D 互斥參數(shù)
-F 打包成一個 exe 文件,小項目可以采用,打開比較慢,多個 .py 打包時不能使用
-D 默認參數(shù),打包結(jié)果放入到創(chuàng)建的文件夾中,可以看到里面有很多的依賴文件
# -w -c 互斥參數(shù)
-w 使用項目的 GUI 界面,無 cmd 控制臺
-c 默認參數(shù),使用 cmd 控制臺 如果打包文件執(zhí)行報錯,可嘗試用 -c 顯示控制臺
-n 執(zhí)行項目的名稱,默認 .py 的文件名
-i 將 ico 圖標(biāo)打包到 exe 文件中,(例 `-i "icon.icns"`,`Mac` 下圖標(biāo)文件為 `icns` 格式, `Win` 為`ico` 格式)。
--hidden-import 打包時導(dǎo)包信息
# 打包 PyQt 項目強烈建議 帶上以下參數(shù)
--hidden-import PyQt5.sip
# 打包命令示例
# 在項目的根目錄下執(zhí)行打包命令
$ pyinstaller -w xxx.py --hidden-import PyQt5.sip
# 打包結(jié)果輸出在項目根目錄下的 dist 文件夾中
# 不建議使用 -F 打包成一個 exe 文件 所謂:打包一時爽,打開 5 秒鐘
# 非 -F 命令下, 靜態(tài)資源、建好的 Sqlite 數(shù)據(jù)庫可以直接放入 dist 中生成的文件夾中
三、打包
進入到工作目錄,直接打包。
打包
方式一:
【推薦】打包后的應(yīng)用程序體積大,但是只有首次慢點,后面都快,
不建議使用 -F 打包成一個 exe 文件 所謂:打包一時爽,打開 5 秒鐘
$ pyinstaller demo.py
-
優(yōu)點:
1、很容易在文件夾中查看 pyinstaller 收集的所有依賴庫信息,文件較多。
2、方便發(fā)布新的可執(zhí)行程序。如果腳本依賴庫沒有任何的變化,那么下次可以直接發(fā)布新的可執(zhí)行程序即可,用戶只需要在之前的文件夾中替換可執(zhí)行文件就能使用。
3、啟動速度快,首次會慢點。
-
缺點:
打出來的包體積大。
- 打包
方式二:
打包后的應(yīng)用程序體積小,但是啟動慢,每次起碼 5 秒干等
$ pyinstaller -F demo.py
-
優(yōu)點:
1、就一個可執(zhí)行文件,它包含了運行所需要的所有文件,可以直接發(fā)布這個工具。
2、文件體積小。
-
缺點:
但是執(zhí)行速度慢,而且每次重新啟動都慢。
執(zhí)行打包命令后,如果報錯:附 完美解決 Python library not found: libpython3.10m.dylib, Python3, .Python, libpython3…
OSError: Python library not found: .Python, Python, Python3, libpython3.10.dylib, libpython3.10m.dylib This means your Python installation does not come with proper shared library files. This usually happens due to missing development package, or unsuitable build parameters of the Python installation. * On Debian/Ubuntu, you need to install Python development packages: * apt-get install python3-dev * apt-get install python-dev * If you are building Python by yourself, rebuild with `--enable-shared` (or, `--enable-framework` on macOS).解決后,就可以繼續(xù)執(zhí)行上面的打包命令了。打包成功后
app/exe會在dist文件夾中。