詳解python文件打包成exe(pyinstaller簡介.安裝.打包.常見問題)

来源:https://www.cnblogs.com/trotl/archive/2019/11/23/11915039.html
-Advertisement-
Play Games

本文分四個步驟來詳講如何用PyInstaller將py文件打包成exe文件 1. PyInstaller 簡介 2. PyInstaller 安裝 3. 將py文件打包成exe文件 4. PyInstaller打包常見問題 ...


py文件打包成exe文件的方式一共有三種:py2exe、PyInstaller和cx_Freeze

本文分四個步驟來詳講如何用PyInstaller將py文件打包成exe文件

1. PyInstaller 簡介
2. PyInstaller 安裝
3. 將py文件打包成exe文件
4. PyInstaller打包常見問題

一. PyInstaller簡介

1.python相關文件介紹

python作為一門解釋型腳本語言,它有三種發佈方式:
        .py文件 : 源碼文件,運行需要使用者安裝Python環境並且安裝依賴的各種庫
        .pyc文件:pyc文件是Python解釋器可以識別的二進位碼,可跨平臺的,需要使用者安裝相應版本的Python和依賴庫。
        可執行文件:不需要安裝python環境和依賴庫,可針對不同平臺需要打包不同的可執行文件(Windows,Linux,Mac,...)

2.PyInstaller的原理簡介

1. PyInstaller工具可以把python解析器和腳本打包成一個可執行的文件,並不是編譯成真正的機器碼,打包成一個可執行文件後運行效率可能會降低,好處就是在使用者的機器上可以不用安裝python和你的腳本依賴的庫。
2. 利用PyInstaller對指定的的腳本打包時,會先分析腳本所依賴的其他腳本,然後根據導包路徑去查找,把所有相關的腳本收集起來,包括Python解析器,然後根據你的命令參數可分別生成文件夾,或者打包成一個可執行文件。
3. 無論是生成的文件夾里的可執行文件或者只打包成一個可執行文件都可以直接運行,前者需要把整個文件夾都給別人。

註意⚠️:PyInstaller打包的執行文件,只能在和打包機器系統同樣的環境下。也就是說,不具備可移植性,若需要在不同系統上運行,就必須針對該平臺進行打包。

二. PyInstaller的安裝

這裡建議安裝python環境管理工具conda,做到不同的環境隔離
https://www.cnblogs.com/trotl/p/11863544.html

1. PyInstaller在windows下的安裝

使用命令pip install PyInstaller即可
在windows下,pyinstaller需要PyWin32的支持。當用pip安裝PyInstaller時未找到PyWin32,會自動安裝pypiwin32

2. PyInstaller在mac,linux下的安裝

pip install PyInstaller

三. PyInstaller打包

1. options參數說明

通用參數

與生成結果有關參數

Windows和Mac特有的參數

2. 基本語法:

PyInstaller -F -w -i  xxx.ico dev.py --hidden-import=pandas._libs.tslibs.timedeltas

常用參數:
-F 指只生成一個exe文件,不生成其他dll文件
-w 不彈出交互視窗,如果你想程式運行的時候,與程式進行交互,則不加該參數
-i 設定程式圖標 ,其後面的xxx.ico文件就是程式小圖標
dev.py 要打包的程式,如果你不是在dev.py同一級目錄下執行的打包命令,這裡得寫上dev.py的路徑地址
–hidden-import=pandas._libs.tslibs.timedeltas 隱藏相關模塊的引用

註意⚠️:你在哪個目錄下執行的命令,預設打包完成的文件或者文件夾就在該目錄

四. PyInstaller打包常見問題

⚠️避坑點(打包之前請先看看):

1. 路徑最好為英文,沒有中文字元;
2. 腳本名稱里沒有特殊字元
3. 使用utf-8編碼
4. 圖標文件必須是正常格式,為.ico文件
5. 命令使用pyinstaller和pyinstaller.exe結果都是一樣的
6. 參數的添加得在pyinstaller和dev.py文件中間,不能隨意位置添加
7. 如果你打包的代碼中用到了靜態文件,如圖片和資源文件,需手動複製到文件夾中,否則exe文件會報找不到文件的錯
8. 代碼里導包最好使用from的方式,可節省打包後的文件大小
9. 就是當你使用錯誤的參數去打包或者打包到一半中斷,等等此類運行到一半沒了的情況。會導致你原來的py文件變成一個0KB的空文件。裡面的代碼會全部消失!!!所以以後需要有個良好的習慣,就是複製一份代碼出來,用這個副本進行打包。並且參數出錯,或者打錯了導致失敗時,檢查下副本文件的py文件是否還存在再繼續重新打包,不然打出來的就是空的文件,自然一直閃退,因為壓根沒內容(這點我沒遇到過,來自別人的提醒)
10. pygame代碼調試的時候要在結束時加quit()不然程式會崩潰
11. py文件運行沒問題,不代表你打包後的文件運行就沒問題,所以在打包好文件,打算運行exe文件測試時一定要錄屏,因為報錯會一閃而逝然後程式關閉,不仔細看的話,發現不了還報錯,只會認為程式一運行就閃退,會讓人不明所以,都不知道為什麼,只有清楚報的什麼錯才好去解決,所以,一定要錄屏!!!!
12. 如果在py文件中用到了多進程,且你在Windows下編譯需要加一行代碼在開頭,multiprocessing.freeze_support() 
13. 打包的時候要進入到能運行這個py文件的虛擬環境中,不能在別的環境中對py文件打包,不然打包的結果還是你原來的環境,可能打包文件過大,或者引起缺失包等其他問題
14. 如果有打包錯誤,具體看build里的warn***.txt文檔,裡面詳細記載了錯誤的原因。一般都是庫丟失

⚠️Bug:

1. “IndexError: tuple index out of range”

錯誤分析:這個問題是當前的pyinstaller版本不支持python的版本
解決辦法:修改pyinstaller的版本,pip install pyinstaller==適合你的版本

2. ImportError: C extension: No module named‘pandas._libs.tslibs.timedeltas’

錯誤分析:因為我的代碼中引用了pandas庫,然後使用pyinstaller打包的時候顯示模塊缺失
解決辦法:
1. 忽略此模塊(打包時加上–hidden-import=pandas._libs.tslibs.timedeltas)
2. 添加文件
    在你的python3的安裝路徑下找到PyInstaller/hooks的位置
        如C:\Python36\Lib\site-packages\PyInstaller\hooks
    新建文件hook-pandas.py,並填寫以下內容:
                        hiddenimports=[
                            #all your previous hidden imports
                            'pandas', 'pandas._libs.tslibs.timedeltas'
                        ]

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

-Advertisement-
Play Games
更多相關文章
  • 效果 <style type="text/css"> span{ width:80px; height: 10px; display: inline-block; background: grey; margin-right: 3px; font-size: 18px; text-align: ce ...
  • 前端頁面的成功呈現,不僅要求在理想情況下沒問題,當一些後臺介面訪問異常、靜態文件獲取失敗時,仍然需要儘可能提供降級方案或給用戶良好的反饋,不至於整個頁面的奔潰。今天我將分享一些提高頁面健壯性的技巧。 異常處理 主要指數據類型。這種情況最常出現在讀取後臺數據的時候,尤其是需要取數組、對象等引用類型時, ...
  • 進度條 1 <style> 2 #progress{ 3 position: relative; 4 margin: auto; 5 top: 200px; 6 display: block; 7 width: 200px; 8 height: 20px; 9 border-style: dotte ...
  • 如果不知道 Jimu(積木) 是啥,請移步 ".Net Core 分散式微服務框架介紹 Jimu" 這次升級除了支持 .Net Core 3.0 還新增部分功能,如 REST, 鏈路跟蹤等,以下為詳細; 一、功能列表 | 功能 | 說明 |Jimu 1.0.0 | Jimu 0.6.0| | | | ...
  • 轉自:https://www.cnblogs.com/lidabo/p/9134174.html 此處僅供學習,版權屬原作者; 作為一個圖形圖像方向的研究生,我經常都在和 OpenGL 、OpenCV 等多種 C++ 庫打交道。這些庫遵循著不同的規則和用法;另外,為了讓自己的程式具有更多的交互能力, ...
  • NCNN是騰訊開源的一個為手機端極致優化的高性能神經網路前向計算框架。在AOE開源工程里,我們提供了NCNN組件,下麵我們以SqueezeNet物體識別這個Sample為例,來講一講NCNN組件的設計和用法。 ...
  • 第二章 Spring框架基礎 面向介面編程的設計方法 ​ 在上一章中,我們看到了一個依賴於其他類的POJO類包含了對其依賴項的具體類的引用。例如,FixedDepositController 類包含 對 FixedDepositService 類的引用,FixedDepositService 類包含 ...
  • 1 class filter{ 2 public String name(){ 3 return getClass().getSimpleName(); 4 } 5 public String process(String s){ 6 return s; 7 } 8 class filter1 ex ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...