pyinstaller 打包總結


pyinstaller 打包過程總結

 

① 安裝 pyinstaller 打包工具

pip3 install pyinstaller

 

pyinstaller打包命令不熟悉的小伙伴可點擊這里查看喲

 

備注:以下涉及到的文件名字main.py,請替換成自己的文件名

 

② 執行打包命令生成單獨的 .exe 程序

pyinstaller -F main.py

上述執行命令后,等待打包完成,將在當前目錄下生成 build 目錄和 list 目錄,找到 dist 目錄下生成的 main.exe 程序點擊執行,但是頁面出現彈窗然后閃退(彈窗會一閃而過), falied to execute script main

 

③ 執行pyinstaller 提供的調試打包命令,查看打包錯誤日志,通過日志排查問題原因

pyinstaller -D main.py

-D 參數表示打調試包,將展示生成的各種依賴文件,等待打包結束,查看 build/main/warn-main.txt 日志警告文件 ,分析日志排查問題,日志首部如下

 

④ 添加用戶依賴包 

分析日志發現缺失模塊,現在通過命令行,把用戶第三方依賴模塊搜索路徑添(請使用自己電腦定義的安裝目錄)加進打包命令,(下面提供示例,site-packages可以不用添加的,即如果你沒有使用pip -target 安裝第三方模塊到自己指定的目錄,這一步可以省略。有些IDE工具會創建自己的安裝包路徑,所以請添加IDE的安裝包的路徑)

pyinstaller -D -p D:\\Python\\Python38\\Lib\\site-packages main.py

(yp小可愛記得這個地方添加的得是雙斜杠路徑前綴)

如下圖,可以看到添加的路徑被添加到了main.spec文件( .spec文件為pyinstaller打包配置文件)中去了

 

運行依舊報錯 。。。

 

⑤ 環境變量 frozen 注入到 sys

對於windows環境下打包,我們需要添加如下代碼到頂層文件頭部第一行位置,某些庫對系統變量的加載存在bug,因此對系統變量進行手動加載設置(這一步取決於你使用的包)

import sys
import os
if hasattr(sys, 'frozen'):
    os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']

這段代碼和cx_freeze庫相關,在 windows 下,cx_freeze庫用於將程序打包成 exe,會將一個變量 frozen 注入到 sys 中。

現在設置后重新打包,我們發現報錯,如下圖所示

 

⑥ 解決包兼容問題

 說是maplotlib 庫缺少數據文件,matplotlib3.2以后就把mpl-data分離出去了,子目錄下的數據文件會被移除,通過命令查看我當前安裝的matplotlib版本

pip3 list

 

 可以看到我當前使用版本為3.3.1,超過3.2,降低版本

pip3 uninstall matplotlib
pip3 install matplotlib==3.2.0

筆者本來想安裝3.1.1版本,結果3.1.1版本對系統要求安裝 c++ 運行庫, Microsoft Visual C++ 14.0 (其實就是Microsoft Visual c ++ 2015)

 安裝運行庫太麻煩,筆者偷懶,選擇使用3.2.0版本

至此,筆者打包程序可以運行起來了,運行的時候,你發現會多一個黑色彈窗(windows 的 dos 彈窗),我們通過加 -w 參數影藏它,即最終打包命令為

pyinstaller -F -w main.py

 

 ⑦ 使用 pipenv 優化打包體積

  1,安裝 pipenv 虛擬環境

pip install pipenv

  2,激活虛擬環境

pipenv shell

  3,激活后,本地將創建虛擬環境,然后在新虛擬環境安裝 pyinstaller 打包工具

pipenv install pyinstaller

  4,接着在虛擬環境下安裝你自己項目的第三方依賴包文件

  5,然后執行你的打包步驟吧

打包優化前后體積對比,減少了約27.5M空間

              

 

 ⑧ 驗證exe程序執行情況

  1,功能驗證:驗證生成的 .exe 程序功能是否符合預期功能要求

  2,依賴環境驗證:將 .exe 程序放置在不同的純凈的(純凈指的是不需要python等代碼運行環境依然能夠運行)windows電腦上運行,以驗證你的exe程序是否對外有依賴項

 

 

 

 

 

@萍2櫻釋ღ( ´・ᴗ・` )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM