python打包exe等可執行文件總結 pyinstaller py2exe

来源:https://www.cnblogs.com/mltooo/archive/2023/07/02/17513725.html
-Advertisement-
Play Games

不知不覺,《C++面試八股文》已經更新30篇了,這是我第一次寫技術博客,由於個人能力有限,出現了不少紕漏,在此向各位讀者小伙伴們致歉。 為了不誤導更多的小伙伴,以後會不定期的出勘誤文章,請各位小伙伴留意。 在《[C++面試八股文:C++中,設計一個類要註意哪些東西?](https://zhuanla ...


Python打包 有很多可以用的 如 pyinstaller py2exe cx_Freeze nuitka py2app py0xidizer 

 

 

cx_Freeze沒用過

nuitka是把py代碼轉為C++代碼 再重新編譯 優點是運行速度快 占用空間小 缺點是轉換重新編譯等耗時長

py2app是把Python腳本打包成Mac程式的

py0xidizer是把Python腳本打包成嵌入式程式的

這篇文章記錄一下pyinstall和py2exe的用法

 

註:以下都是windows下

 

pyinstaller 

 

安裝:pip installer pyinstaller 

使用:pyinstaller [參數][參數2][...] 要打包的文件(這裡需要把python安裝目錄下scripts目錄添加到環境變數)

示例:pyinstaller -F shili.py

 

參數可以參考 PyInstaller各參數含義_pyinstaller 參數_張棧不全的博客-CSDN博客 很全 

總結常用的幾個

-D :生成出來是一個文件夾 裡面包含各種依賴的庫和資源 還有exe 預設是這個

-F:生成單一exe文件 所有資源都打包在exe里 

-n:生成出來exe和.spec文件的名字 預設是你腳本的名字

-i:exe的圖標

-c:生成出來的exe文件打開有cmd視窗

-w:隱藏cmd視窗

--exclude-module:排除不需要的庫 可以減少文件的大小

打包出來後執行可能會有一閃而過的場景 可以在cmd里執行 會有錯誤信息 方便排錯

---------------------------------------------------------------------------------------------------------------------

py2exe

 

官網:py2exe.org

安裝:pip install py2exe

使用:需要先寫一個py文件 內容是生成時的各種配置 

示例:(這裡需要把你的python目錄添加到環境變數)  

setup.py:

from distutils.core import setup
import py2exe

setup( 
    zipfile=None,
    console = [{"script":'clipboard.py'}] #要編譯的文件 console表示生成控制台程式 windows是windows程式
    options = {
        "py2exe" :
            {
                "compressed" : 1, # 壓縮 
                "optimize" : 2,
                "bundle_files" : 1, # 所有文件打包成一個 exe 文件  可選選項0,1,2,3 詳細見下方
            }
    })

常用參數

setup:核心函數 

setup下

windows: 用於打包帶界面的程式

console: 用於打包命令行程式 

options: 用於指定各種打包選項,如生成zip文件、排除哪些模塊等。

zipfile: 用於把程式需要的dll等文件打包zip 預設打包 設置none則把這些文件打包進exe

 

options里:

excludes: 用於排除不需要的python模塊。

includes: 用於強制包含某些python模塊。

packages: 用於自動包含某些python包。

dist_dir: 指定輸出目錄。

dll_excludes: 用於排除某些不需要的dll文件。

bundle_files: 可選參數 0,1,2,3   0:表示打包成單一exe文件 1和2實測沒看出區別 有dll文件和exe 3:pyd dll 和exe文件

compressed: 是否壓縮

name: 作者

description: exe名字

 

windows里:

icon_resources: 設置圖標

script: 要打包的腳本

示例:windows = [{'script':'shili.py', 'icon_resources': [(1, 'xx.ico')]}]

 

寫好setup.py後 複製到要打包的目錄下 

然後打開cmd 切換到setup.py的目錄 執行 python setup.py py2exe  打包後的文件在同目錄下的dist文件夾里   

 

坑:

1、文件名必須是setup.py 其他都不行 2、如果你用的是64位python只能生成64位程式 只能在64位系統上運行 解決方法:在32位python下打包  3、從Python3.3開始 window構建python使用visual studio 2010 生成exe後需要複製msvcr100.dll到dist目錄下 和exe文件一起發佈

python版本不同需要的dll不同 

以下來自py2exe官網

如果您使用的是 Python 2.4 或 2.5,那麼您需要的 DLL 稱為 MSVCR71.dll。此 DLL 可能已包含在您的 dist 目錄中,在這種情況下,您無需執行更多操作。

但是,此文件的版權歸Microsoft所有,您需要檢查您是否具有重新分發它的合法權利。如果您有 Visual Studio 的副本,請檢查安裝中提供的文件修訂.txt以查看您是否具有此 DLL 的重新分發許可權。通常,如果您擁有Microsoft Visual C++ 的許可證,則您有權重新分發它,但如果您使用速成版,則無權重新分發它。

如果您無權重新分發 MSVCR71.dll,則您的用戶必須使用 Microsoft Visual C++ 2005 可再發行組件包 (vcredist_x86.exe) 自行安裝它。

您可以指示用戶自己下載並運行它,也可以為您的應用程式創建一個安裝程式,其中包括 vcredist_x86.exe(它本身可由任何人再發行),然後將其作為應用程式安裝的一部分運行。

python2.6,2.7,3.0,3.1 需要MSVCR90.dll 

其他版本官網沒寫 可能是MSVCR100.dll 可能MCVCR100.dll向下相容?這個沒試過 

如果沒有打包相關dll 客戶機上也沒有需要的dll文件 會報 缺少msvcrXX.dll的錯誤 可以在虛擬機里打開軟體運行一下 看缺少什麼文件

 

有人說 py2exe打包的文件比pyinstaller小 但是我打包相同的文件 打包出來的文件都差不多大  py2exe配置文件里的各種括弧簡直要把人繞暈

 

 

個人感覺pyinstaller好用一些 成熟一些 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 數組索引是指在`numpy`數組中引用特定元素的方法。`numpy`的數組索引又稱為`fancy indexing`,比其他編程語言的索引強大很多。 # 1. 選取數據 numpy的索引除了像其他語言一樣選擇一個元素,還可以間隔著選取多個元素,也可以用任意的順序選取元素。 比如一維數組: ```py ...
  • urllib+BeautifulSoup爬取並解析2345天氣王歷史天氣數據 網址:[東城歷史天氣查詢_歷史天氣預報查詢_2345天氣預報](https://tianqi.2345.com/wea_history/71445.htm) ![image-20230702161423470](https ...
  • # 數列分段 Section II ## 題目描述 對於給定的一個長度為N的正整數數列 $A_{1\sim N}$,現要將其分成 $M$($M\leq N$)段,並要求每段連續,且每段和的最大值最小。 關於最大值最小: 例如一數列 $4\ 2\ 4\ 5\ 1$ 要分成 $3$ 段。 將其如下分段: ...
  • 本文通過閱讀Spring源碼,分析Bean實例化流程。 # Bean實例化入口 上一篇文章已經介紹,Bean實例化入口在AbstractApplicationContext類的finishBeanFactoryInitialization方法: ```java protected void fini ...
  • # 1、Java常用插件實現方案 ## 1.2、serviceloader方式 serviceloader是java提供的spi模式的實現。按照介面開發實現類,而後配置,java通過ServiceLoader來實現統一介面不同實現的依次調用。而java中最經典的serviceloader的使用就是J ...
  • **原文鏈接:** [Go 語言 context 都能做什麼?](https://mp.weixin.qq.com/s/7IliODEUt3JpEuzL8K_sOg) 很多 Go 項目的源碼,在讀的過程中會發現一個很常見的參數 `ctx`,而且基本都是作為函數的第一個參數。 為什麼要這麼寫呢?這個參 ...
  • POM( Project Object Model,項目對象模型 ) 是 Maven 工程的基本工作單元,它是一個 XML 文件,包含了項目的基本信息,用於描述項目如何構建,聲明項目依賴等等。執行任務或目標時,Maven 會在當前目錄中查找並讀取 POM,獲取所需的配置信息,然後執行目標。 1、基本 ...
  • # HttpServletResponse對象 ## 基本介紹 ​ Web伺服器收到客戶端的http請求,會針對每次請求,分別創建一個用於**代表請求**的 request對象 和**代表響應**的 response對象。 ​ request 和 response對象 代表請求和響應:**獲取客戶瑞 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...