桌面應用打包:pyinstaller

来源:https://www.cnblogs.com/Jcloud/archive/2023/08/08/17614594.html
-Advertisement-
Play Games

在使用python開發一些小工具時,如果其他人電腦中沒有python環境或者沒有安裝相應的第三方庫,是沒辦法運行的,而要求對方安裝又不現實,尤其是對方不是技術人員,因此如何將一個獨立的python程式,使它成為成為一個不用考慮環境,雙擊即可運行的桌面應用呢?使用pyinstaller打包是一個不錯的... ...


1 背景

在使用python開發一些小工具時,如果其他人電腦中沒有python環境或者沒有安裝相應的第三方庫,是沒辦法運行的,而要求對方安裝又不現實,尤其是對方不是技術人員,因此如何將一個獨立的python程式,使它成為成為一個不用考慮環境,雙擊即可運行的桌面應用呢?使用pyinstaller打包是一個不錯的選擇。

2 什麼是pyinstaller

pyinstaller是一個支持跨平臺使用的第三方庫,它可以將腳本執行所需的模塊和庫,自動分析、收集並生成一個文件夾或者可執行文件。

以下示例使用windows環境,由於pyinstaller的跨平臺性,與類unix環境命令一樣,只是最終生成的可執行文件不一樣。

3 如何安裝

安裝pyinstaller模塊與安裝其他python模塊一樣,使用pip命令安裝即可。
pip install pyinstaller
安裝輸出結果:

其中的 altgraph、future等代表 PyInstaller 模塊依賴環境。

4 如何使用

4.1 常用命令介紹

pyinstaller + 選項 + python入口源文件

主要選項包括:

  • -F 打包成一個exe文件(如果是多個py文件,下麵有解決辦法)
  • -D 自動創建一個包含桌面應用文件的目錄,包括所有運行依賴文件(預設選項)
  • -w 指定程式運行時,不顯示命令行視窗(僅對windows有效)
  • -i + ico路徑 可以更換應用圖標(如果是當前文件夾下,不用添加ico路徑)
  • -d 產生debug版本的exe文件
  • -o 指定.spec文件生成目錄,如果沒有指定,將會在當前根目錄下輸出
  • -n 指定.spec文件名字,如果省略,主文件名將作為.spec的文件名字
  • -p 設置導入路徑,可以使用路徑分隔符(windows是分號,類unix是冒號)

4.2 常用方式舉例

4.2.1 打包成單個文件

使用以下命令將會使python腳本,打包成為一個exe文件。
pyinstaller -F -w -i “./dian_128.ico” start_dian.py

其中:

  • -F 命令打包成單個文件
  • -w 無命令行視窗
  • -i 指定exe文件icon圖標

執行成功後,將會在根目錄生成兩個文件夾,其中“build”文件中包含的是所有依賴文件,“dist”文件夾中存放著本次生成的exe文件。

4.2.2 打包成文件夾

使用以下命令將會使python腳本,打包成為一個文件夾。
pyinstaller -D -w -i “./dian_128.ico” start_dian.py

其中:

  • -D 命令打包成一個文件夾
  • -w 無命令行視窗
  • -i 指定exe文件icon圖標

命令行執行成功後,將會在dist目錄下生成一個start_dian的子目錄,該目錄中包含了大量的.dll文件和.pyz文件,都是exe文件的支撐文件。

4.3 使用.spec文件配置編譯

上面講解的都是通用版本,不太靈活,如果想要加入新的資源,或每次編譯不想輸入很長的命令,可以使用.spec文件,進行定製化配置編譯。

4.3.1 生成.spec文件

使用上面的方式進行編譯後,如未指定.spec生成目錄,會在當前根目錄生成一個與編譯py文件同名的.spec文件;
或使用命令pyi-makespec -F start_dian.py,將會直接生成.spec文件;

4.3.2 spec文件內容介紹

打開spec文件

這裡僅對涉及到的幾個關鍵變數進行解釋:

1.Analysis:

  • [‘start_dian.py’]:是主文件以及全部依賴文件,如果依賴文件都在同一目錄下可以不寫;
  • oathex:項目的絕對路徑;
  • datas:添加資源文件,例如文件夾、圖片、excel等等,以元組入參,第一個參數為原始路徑,第二個參數為編譯後的目標路徑;

2.EXE:

  • console:是否開啟命令行,預設為True(開啟);
  • icon:編譯出exe可執行文件產物的圖標,必須使用絕對路徑;
  • name:EXE內和COLLECT內的name都是編譯後的文件名,預設與編譯主文件同名;

4.3.3 spec文件編譯

配置好的spec文件,執行命令進行編譯,不再需要其他參數:
pyinstaller start_dian.spec

4.3.4 以下四種情況,修改spec文件比較好:

  1. 當您需要將資源文件與exe文件捆綁在一起時;
  2. 當您的依賴文件包括.dll或.so文件時;
  3. 當您運行exe需要運行參數時;
  4. 當您需要合併多程式包成為通用模塊時;

5 常見問題

1.多文件如何打包

  • 在.spec文件中Analysis參數hiddenimports中添加導入模塊名稱,修改後,可再次進行打包,將會解決exe文件依賴包找不到的問題;
  • 在命令中使用-p 主文件 + -p 引入文件 …,可以直接生成exe文件。

2.exe文件過大

  • 安裝python虛擬環境;
  • 導入包時,使用form + 包名 + import + 功能函數,不要直接import + 包名。

3.出現莫名其妙的錯誤

  • python文件所在的全路徑,儘量不要有中文存在。

4.打包成一個文件夾後,發送給其他人無法使用

  • 需要將dist下麵的文件夾整體發送,保持exe文件與dist下麵文件夾的路徑不變。

5.運行exe文件後,沒有達到預期效果

  • 文件報錯了,重新打包文件,使用控制台(去掉-w參數),將會在控制台顯示程式運行過程與列印錯誤。

6.python腳本主要是命令行輸出,但是程式執行完後就退出無法查看輸出信息

  • 在python腳本最後一行添加命令:os.system(“pause”)或者raw_input(“輸出任意按鍵即可退出”)。

作者:京東物流 駱銅磊

來源:京東雲開發者社區 自猿其說Tech


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 為了降低啟動時間,quarkus下的常規作用域bean遵循懶載入規則,但有時我們希望bean可以更早實例化,本篇,咱們一起來瞭解懶載入規則和改變規則的方法 ...
  • 由於垃圾收集演算法的實現涉及大量的程式細節,而且各個平臺的虛擬機操作記憶體的方法又各不相同,因此本節不打算過多地討論演算法的實現,只是介紹幾種演算法的思想及其發展過程。 ...
  • ##### 該切麵功能適用場景 - 下單請求多次提交,導致生成多個相同的訂單 ##### 解決方案 - 前端解決:限制點擊下單按鈕為1次後失效。不足:用戶體驗下降,能繞過前端 - 後端解決:防重提交切麵解決,自定義註釋實現該功能(如下) - 步驟: - 自定義註釋類RepeatSubmit - 創建 ...
  • ## 9.1、環境搭建 ### 9.1.1、創建module ![image](https://img2023.cnblogs.com/blog/2052479/202308/2052479-20230806234218377-617105837.png) ### 9.1.2、選擇maven ![i ...
  • 在Go中,有不同的**變數類型**,例如: - `int` 存儲整數(整數),例如123或-123 - `float32` 存儲浮點數字,帶小數,例如19.99或-19.99 - `string` - 存儲文本,例如“ Hello World”。字元串值用雙引號括起來 - `bool` 存儲具有兩個 ...
  • 本文已收錄至Github,推薦閱讀 👉 [Java隨想錄](https://github.com/ZhengShuHai/JavaRecord) 微信公眾號:[Java隨想錄](https://mmbiz.qpic.cn/mmbiz_jpg/jC8rtGdWScMuzzTENRgicfnr91C5 ...
  • 最近颱風肆虐,已進入我國24小時警戒線!颱風“卡努”到底要去哪兒? 作為一個Python程式員,雖然我幫不上忙,但是時時關註一下還是可以的,順便祈禱一下臺風往東邊某個小日子過得不錯的小島吹。 於是我花了一分鐘,用Python寫了一個獲取天氣數據的代碼,然後進行數據分析,看看到底吹不吹的過去。 首先我 ...
  • 6、安裝插件sublimeREPL 需要安裝插件:sublimeREPL,才能在sublime編譯器中接受鍵盤輸入的信息,才能執行交互結果 插件安裝快捷鍵:ctrl+shift+P,打開插件安裝面板 輸入install後,選擇package control:install package 安裝插件管 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...