最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Windows下PyInstaller打包Python的完整教程

 更新時(shí)間:2025年10月22日 09:13:24   作者:小莊-Python辦公  
在開發(fā) Python 應(yīng)用程序時(shí),有時(shí)我們需要將項(xiàng)目進(jìn)行打包,PyInstaller的基本功能就是將Python腳本打包成可執(zhí)行文件,項(xiàng)目我們就來看看完整的操作過程吧

前言

一篇掌握 PyInstaller:從零到可分發(fā)的 .exe。覆蓋安裝、常用參數(shù)、資源文件、GUI、.spec 進(jìn)階、簽名與排錯(cuò)。

為什么選擇 PyInstaller

適用:將 Python 腳本打包為無需 Python 環(huán)境的可執(zhí)行文件。

優(yōu)勢:自動分析依賴、跨平臺(需在目標(biāo)平臺上構(gòu)建)、支持單文件/目錄兩種分發(fā)方式。

工作原理快覽

解析入口腳本的導(dǎo)入依賴,收集 .py、數(shù)據(jù)文件、動態(tài)庫。

生成引導(dǎo)器(bootloader)+ 內(nèi)置 Python 解釋器 + 資源包。

--onefile:運(yùn)行時(shí)臨時(shí)解壓到緩存目錄再執(zhí)行;--onedir:直接從目錄運(yùn)行。

環(huán)境準(zhǔn)備(建議使用虛擬環(huán)境)

# 1) 新建并激活 venv(PowerShell)
python -m venv .venv
.\.venv\Scripts\Activate.ps1
# 2) 升級基本工具
pip install -U pip wheel
# 3) 安裝 PyInstaller
pip install -U pyinstaller

快速入門(命令行應(yīng)用)

示例 app.py

# app.py
import sys, json
from pathlib import Path

def resource_path(relative):
    base = getattr(sys, "_MEIPASS", Path(__file__).parent)  # onefile 下的臨時(shí)目錄
    return Path(base) / relative

def main():
    print("Hello PyInstaller!")
    cfg = json.loads(resource_path("data/config.json").read_text(encoding="utf-8"))
    print("config:", cfg)

if __name__ == "__main__":
    main()

準(zhǔn)備數(shù)據(jù)文件:data/config.json

{"app_name":"Hello","debug":true}

打包(單文件):

pyinstaller -F -n hello `
  --add-data "data\config.json;data" `
  app.py
  • Windows 的 --add-data 使用分號 ;(Linux/macOS 用冒號 :)。
  • 輸出目錄:dist/hello.exe(成品)、build/(臨時(shí))、hello.spec(構(gòu)建配置)。

GUI 應(yīng)用打包(隱藏控制臺)

  • 控制臺程序(默認(rèn)):--console
  • GUI 程序(隱藏控制臺):-w--windowed
pyinstaller -F -w -n MyApp -i assets\app.ico app.py

資源與路徑處理

讀取資源時(shí)使用上方 resource_path(),兼容開發(fā)與打包。

復(fù)制資源:

  • 數(shù)據(jù):--add-data "src_path;dest_dir"
  • 二進(jìn)制:--add-binary "src_path;dest_dir"

示例:

pyinstaller -F `
  --add-data "assets\logo.png;assets" `
  --add-binary "bin\helper.dll;bin" `
  app.py

依賴與導(dǎo)入問題

隱式導(dǎo)入未被自動檢測:--hidden-import some_pkg.submod

添加搜索路徑(非標(biāo)準(zhǔn)包位置):--paths path\to\libs

縮小體積(排除不需要的模塊):--exclude-module tests

常用模式與建議

--onefile:易分發(fā);啟動需解壓,體積更大。

--onedir:啟動快;以文件夾分發(fā),便于增量更新。

科學(xué)計(jì)算(numpy/pandas/scipy)通常推薦 --onedir 以提升啟動速度。

.spec 文件進(jìn)階(可定制構(gòu)建)

  • 首次打包會生成 your_app.spec,可編輯以添加資源、修改參數(shù)。
  • 使用 .spec 構(gòu)建:pyinstaller your_app.spec
  • 簡例(核心片段,實(shí)際文件更長):
# hello.spec(示意)
datas = [("data\\config.json", "data"), ("assets\\logo.png", "assets")]
# 在 Analysis(...) 中傳入 datas;在 EXE(...) 中設(shè)置 name、icon、console 等

適合復(fù)雜資源收集、多個(gè)入口腳本、精細(xì)控制壓縮/排除。

圖標(biāo)與版本信息(Windows)

圖標(biāo):-i path\to\icon.ico

版本資源:--version-file version_info.txt

version_info.txt 示例(節(jié)選):

VSVersionInfo(
  FileVersion='1.0.0.0',
  ProductVersion='1.0.0.0',
  FileDescription='MyApp',
  CompanyName='Your Company',
)

代碼簽名與可信度(Windows)

  • 未簽名的可執(zhí)行文件更易被殺毒攔截。
  • 使用證書簽名(Windows SDK 的 signtool):
signtool sign /a /fd sha256 /tr http://timestamp.digicert.com /td sha256 `
  dist\MyApp.exe

常見錯(cuò)誤排查

“failed to execute script”:從命令行運(yùn)行 dist\xxx.exe 觀察錯(cuò)誤;嘗試 --log-level DEBUG。

啟動緩慢(單文件):改用 --onedir 或減少資源體積;可選安裝 UPX 壓縮(可能觸發(fā)殺毒)。

缺少 DLL:確認(rèn)依賴是否在同目錄或通過 --add-binary 復(fù)制;必要時(shí)在代碼中用 os.add_dll_directory() 設(shè)置路徑(Python 3.8+)。

打包前清理緩存:pyinstaller --clean -F app.py

構(gòu)建與發(fā)布建議

固定依賴版本:requirements.txt;在干凈環(huán)境重裝后再打包。

在目標(biāo)平臺上構(gòu)建(Windows 打包 Windows,macOS 打包 macOS)。

小步驗(yàn)證:先 --onedir 驗(yàn)證,再切換 --onefile

CI/CD:在流水線中使用同樣的命令和固定版本以保證可重復(fù)。

常用命令速查

# 單文件(控制臺)
pyinstaller -F -n app app.py
# 單文件(GUI,無控制臺)
pyinstaller -F -w -n app -i assets\app.ico app.py
# 追加資源/二進(jìn)制
pyinstaller -F --add-data "data\cfg.json;data" --add-binary "bin\x.dll;bin" app.py
# 指定隱藏導(dǎo)入與路徑
pyinstaller -F --hidden-import pkg.sub --paths extra\libs app.py
# 清理并覆蓋輸出
pyinstaller --clean --noconfirm -F app.py
# 使用 spec 構(gòu)建
pyinstaller app.spec

到此這篇關(guān)于Windows下PyInstaller打包Python的完整教程的文章就介紹到這了,更多相關(guān)PyInstaller打包Python內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python Opencv實(shí)現(xiàn)最強(qiáng)美顏濾鏡效果

    Python Opencv實(shí)現(xiàn)最強(qiáng)美顏濾鏡效果

    這篇文章主要介紹了如何利用Python OpenCV制作一個(gè)強(qiáng)大的美顏濾鏡效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-03-03
  • python+selenium+autoit實(shí)現(xiàn)文件上傳功能

    python+selenium+autoit實(shí)現(xiàn)文件上傳功能

    這篇文章主要介紹了python+selenium+autoit實(shí)現(xiàn)文件上傳功能,需要的朋友可以參考下
    2017-08-08
  • Python刪除指定目錄下過期文件的2個(gè)腳本分享

    Python刪除指定目錄下過期文件的2個(gè)腳本分享

    這篇文章主要介紹了Python刪除指定目錄下過期文件2個(gè)腳本分享,可以用在如刪除指定日期前的日志文件,需要的朋友可以參考下
    2014-04-04
  • Python+PySide6構(gòu)建一個(gè)響應(yīng)式視頻剪輯工具

    Python+PySide6構(gòu)建一個(gè)響應(yīng)式視頻剪輯工具

    從長視頻中批量剪輯出精彩片段,傳統(tǒng)的做法是打開笨重的剪輯軟件手動操作,效率低下,下面我們就來講講如何使用Python構(gòu)建一個(gè)響應(yīng)式視頻剪輯工具吧
    2025-10-10
  • python爬蟲破解字體加密案例詳解

    python爬蟲破解字體加密案例詳解

    這篇文章主要介紹了python爬蟲破解字體加密案例詳解,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • pandas如何計(jì)算移動平均值

    pandas如何計(jì)算移動平均值

    在處理金融數(shù)據(jù)分析時(shí),常需計(jì)算移動平均值。遇到數(shù)據(jù)不足導(dǎo)致結(jié)果為NAN問題,可使用pandas中rolling函數(shù)的min_periods參數(shù)。設(shè)置min_periods=1即可解決,它允許窗口中的非空觀測值少于窗口大小時(shí)也能計(jì)算均值,確保數(shù)據(jù)不足時(shí)也能得出結(jié)果
    2024-09-09
  • 一文詳解Python數(shù)據(jù)類型:數(shù)字、布爾與None的語義

    一文詳解Python數(shù)據(jù)類型:數(shù)字、布爾與None的語義

    在 Python 中,一切皆對象,每個(gè)對象都屬于特定的數(shù)據(jù)類型,理解數(shù)據(jù)類型的特性和行為是編寫高質(zhì)量 Python 代碼的關(guān)鍵,本文將深入探討 Python 的核心數(shù)據(jù)類型:數(shù)字、布爾值和 None,揭示它們背后的設(shè)計(jì)哲學(xué)和使用技巧
    2025-11-11
  • 一文帶你梳理Python中七種配置文件的常見用法

    一文帶你梳理Python中七種配置文件的常見用法

    在寫 Python 項(xiàng)目的時(shí)候,最讓人頭大的環(huán)節(jié)之一,就是配置文件,本文將帶大家一起深入了解下Python中七種配置文件的常見用法,感興趣的可以了解下
    2025-09-09
  • matplotlib實(shí)戰(zhàn)之餅圖繪制詳解

    matplotlib實(shí)戰(zhàn)之餅圖繪制詳解

    餅圖,或稱餅狀圖,是一個(gè)劃分為幾個(gè)扇形的圓形統(tǒng)計(jì)圖表,這篇文章主要為大家詳細(xì)介紹了如何使用Matplotlib繪制餅圖,需要的小伙伴可以參考下
    2023-08-08
  • 淺析Python是如何實(shí)現(xiàn)集合的

    淺析Python是如何實(shí)現(xiàn)集合的

    之前我們介紹過字典的實(shí)現(xiàn)原理,它底層是基于哈希表實(shí)現(xiàn)的,而集合也是如此。本次我們來聊一下 Python 的集合是怎么實(shí)現(xiàn)的,希望對大家有所幫助
    2022-12-12

最新評論

漯河市| 根河市| 秦安县| 南郑县| 越西县| 都匀市| 西青区| 台南市| 清水县| 肃南| 东海县| 酒泉市| 石林| 延津县| 静安区| 夏津县| 彩票| 固原市| 福海县| 昌黎县| 申扎县| 德兴市| 托克托县| 阿拉尔市| 平南县| 仙游县| 商都县| 兴文县| 彰化市| 定安县| 鲜城| 咸宁市| 右玉县| 开平市| 邯郸县| 鹤壁市| 长寿区| 松原市| 天门市| 兴文县| 景泰县|