Python PyInstaller 打包exe制作安裝包

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

0.png

一、簡介

  • python 提供了幾個用來打包的模塊,主要有 py2app、py2exepyinstaller。
1.png
2.png
  • 根據(jù)上面的表可以看出,只有 fbs,cx_FreezePyInstaller 滿足跨平臺要求,本文以 PyInstaller 進行打包作為案例,其他兩個大同小異。

二、使用說明

  • pyinstaller 能夠在 Windows、LinuxMac 等操作系統(tǒng)下將 Python 源文件打包,通過對源文件打包, Python 程序可以在沒有安裝 Python 的環(huán)境中運行,也可以作為一個獨立文件方便傳遞和管理。

  • PyInstaller 支持 Python 2.7Python 3.3+。可以在 Windows、MacLinux 上使用,但是并不是跨平臺的,而是說要是希望打包成 .exe 文件,需要在Windows 系統(tǒng)上運行 PyInstaller 進行打包工作;打包成 Mac App,需要在 Mac OS 上使用,Linux 也一樣,不能在一端上打另外兩段的包,還有 Mac m1 的打包不能給 Mac intel 的使用,相反也一樣,運行會報錯:Error:Bad CPU type in executable。

  • pyinstaller 不需要自己寫 setup.py 文件,只需要在工作目錄中輸入打包命令即可。最后會生成 builddist 文件夾,啟動文件在 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,用于告訴打包程序某個模塊我用不著你不用打包進去。
3.png

常用打包參數(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 文件夾中。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容