欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用Python腳本控制PyInstaller打包實(shí)戰(zhàn)詳解

 更新時(shí)間:2025年07月15日 09:16:53   作者:一勺菠蘿丶  
這篇文章將為大家詳細(xì)介紹如何使用 Python 腳本控制 PyInstaller 打包過程,通過代碼注釋和功能擴(kuò)展,讓您輕松掌握專業(yè)級(jí)的應(yīng)用打包技巧

完整打包腳本解析

import os
import PyInstaller.__main__

# 定義程序名稱和版本
app_name = "微信視頻號(hào)數(shù)據(jù)采集工具v1.0.0"

# 確保README.md存在 - 提供更好的用戶體驗(yàn)
if not os.path.exists("README.md"):
    print("警告: README.md文件不存在,將創(chuàng)建一個(gè)空文件")
    with open("README.md", "w", encoding="utf-8") as f:
        f.write("# 微信視頻號(hào)數(shù)據(jù)采集工具\(yùn)n\n請(qǐng)參考使用說明。")

# 定義打包參數(shù) - 核心配置部分
pyinstaller_args = [
    "video_data_collector.py",  # 主程序文件
    "--name={}".format(app_name),  # 程序名稱
    "--onefile",  # 打包成單個(gè)exe文件
    "--console",  # 保留控制臺(tái)窗口,因?yàn)槌绦蛐枰脩糨斎?
    # "--icon=icon.ico",  # 如果有圖標(biāo)文件,可以取消注釋
    "--clean",  # 每次構(gòu)建前清理臨時(shí)文件
    "--add-data={}".format("README.md;."),  # 添加使用文檔
    # 添加所需的庫 - 解決打包后缺失模塊的問題
    "--hidden-import=pandas",
    "--hidden-import=openpyxl",
]

print("開始打包...")
print("這可能需要幾分鐘時(shí)間,請(qǐng)耐心等待...")

# 執(zhí)行打包命令 - 使用PyInstaller的API接口
PyInstaller.__main__.run(pyinstaller_args)

print("\n打包完成!")
print(f"可執(zhí)行文件位于 dist/{app_name}.exe")
print("請(qǐng)將README.md文件復(fù)制到同一目錄,作為使用說明。")

input("按Enter鍵退出...")

關(guān)鍵參數(shù)詳解

1. 程序名稱配置

app_name = "微信視頻號(hào)數(shù)據(jù)采集工具v1.0.0"

作用:定義生成的可執(zhí)行文件名稱

最佳實(shí)踐

  • 包含應(yīng)用名稱和版本號(hào)(如 工具名-v1.0.0
  • 使用下劃線代替空格(避免路徑問題)
  • 示例優(yōu)化:app_name = f"微信視頻號(hào)采集工具_(dá)v{version}"

2. 資源文件檢查

if not os.path.exists("README.md"):
    # 創(chuàng)建默認(rèn)說明文件

作用:確保必要的文檔文件存在

重要性

  • 避免打包過程因缺失文件而中斷
  • 提供用戶友好的使用說明

擴(kuò)展:可添加多個(gè)資源文件檢查

required_files = ["README.md", "config.ini", "icon.ico"]
for file in required_files:
    if not os.path.exists(file):
        # 創(chuàng)建默認(rèn)文件或警告

3. PyInstaller 核心參數(shù)

參數(shù)作用示例值注意事項(xiàng)
--onefile生成單個(gè)exe文件啟動(dòng)稍慢但分發(fā)方便
--console顯示控制臺(tái)窗口調(diào)試程序必備,發(fā)布時(shí)可改為--windowed
--clean清理構(gòu)建緩存避免舊文件干擾新構(gòu)建
--add-data添加額外文件"源文件;目標(biāo)目錄"Windows用;,Linux/Mac用:
--hidden-import添加隱藏依賴pandas, openpyxl解決打包后模塊缺失問題

4. 隱藏導(dǎo)入技巧

"--hidden-import=pandas",
"--hidden-import=openpyxl",

為什么需要:PyInstaller 有時(shí)無法自動(dòng)檢測(cè)動(dòng)態(tài)導(dǎo)入的模塊

查找缺失模塊

  • 打包后運(yùn)行 exe 文件
  • 查看報(bào)錯(cuò)信息中缺失的模塊
  • 添加到 hidden-import 列表

自動(dòng)化方案

hidden_imports = ["pandas", "openpyxl", "其他模塊"]
for module in hidden_imports:
    pyinstaller_args.append(f"--hidden-import={module}")

高級(jí)功能擴(kuò)展

1. 添加應(yīng)用圖標(biāo)

# 在參數(shù)列表中添加
"--icon=app_icon.ico",

準(zhǔn)備圖標(biāo)

  • 使用在線工具將 PNG 轉(zhuǎn)為 ICO 格式
  • 推薦尺寸:256x256 像素

注意事項(xiàng)

if os.path.exists("app_icon.ico"):
    pyinstaller_args.append("--icon=app_icon.ico")
else:
    print("警告: 圖標(biāo)文件不存在,使用默認(rèn)圖標(biāo)")

2. 版本信息管理

# 創(chuàng)建 version_info.txt 文件
version_info = """
# UTF-8
VSVersionInfo(
  ffi=FixedFileInfo(...),
  kids=[
    StringFileInfo(...),
    VarFileInfo(...)
  ]
)
"""
with open("version_info.txt", "w") as f:
    f.write(version_info)

# 添加到參數(shù)
"--version-file=version_info.txt",

作用:在 Windows 屬性中顯示版本信息

在線生成工具:使用 pyi-grab_version 獲取現(xiàn)有 exe 的版本信息模板

3. 排除不必要的模塊

# 減小可執(zhí)行文件體積
"--exclude-module=tkinter",
"--exclude-module=matplotlib",

常用可排除模塊

  • 測(cè)試框架:pytest, unittest
  • 未使用的庫:numpy, scipy(如果未使用)
  • GUI 庫:tkinter, PyQt5(如果未使用)

4. 增加文件加密

# 安裝所需依賴: pip install pyinstaller[encryption]
"--key=my_secret_key",

作用:保護(hù) Python 源代碼不被輕易反編譯

注意事項(xiàng)

  • 加密會(huì)增加打包時(shí)間
  • 不是絕對(duì)安全,但增加破解難度

完整增強(qiáng)版打包腳本

import os
import sys
import PyInstaller.__main__
from datetime import datetime

# 配置信息
APP_NAME = "微信視頻號(hào)采集工具"
VERSION = "1.0.1"
AUTHOR = "Your Company"
COPYRIGHT = f"Copyright ? {datetime.now().year} {AUTHOR}"

# 自動(dòng)生成帶版本號(hào)的名稱
app_name = f"{APP_NAME}_v{VERSION}"

# 檢查必要資源文件
required_resources = {
    "README.md": "# 使用說明\n\n這里是詳細(xì)的使用指南...",
    "config.ini": "[DEFAULT]\nlang=zh_CN",
    "version_info.txt": f"""# UTF-8
VSVersionInfo(
  ffi=FixedFileInfo(
    filevers=({VERSION.split('.')[0]}, {VERSION.split('.')[1]}, {VERSION.split('.')[2]}, 0),
    prodvers=({VERSION.split('.')[0]}, {VERSION.split('.')[1]}, {VERSION.split('.')[2]}, 0),
    mask=0x3f,
    flags=0x0,
    OS=0x40004,
    fileType=0x1,
    subtype=0x0,
    date=(0, 0)
  ),
  kids=[
    StringFileInfo(
      [
      StringTable(
        '040904B0',
        [StringStruct('CompanyName', '{AUTHOR}'),
         StringStruct('FileDescription', '{APP_NAME}'),
         StringStruct('FileVersion', '{VERSION}'),
         StringStruct('InternalName', '{APP_NAME}'),
         StringStruct('LegalCopyright', '{COPYRIGHT}'),
         StringStruct('OriginalFilename', '{app_name}.exe'),
         StringStruct('ProductName', '{APP_NAME}'),
         StringStruct('ProductVersion', '{VERSION}')])
      ]), 
    VarFileInfo([VarStruct('Translation', [1033, 1200])])
  ]
)"""
}

# 確保資源文件存在
for filename, default_content in required_resources.items():
    if not os.path.exists(filename):
        print(f"創(chuàng)建默認(rèn)文件: {filename}")
        with open(filename, "w", encoding="utf-8") as f:
            f.write(default_content)

# 構(gòu)建PyInstaller參數(shù)
pyinstaller_args = [
    "video_data_collector.py",  # 主程序
    f"--name={app_name}",       # 程序名稱
    "--onefile",                # 單文件模式
    "--console",                # 顯示控制臺(tái)
    "--clean",                  # 清理構(gòu)建緩存
    "--add-data=README.md;.",   # 添加文檔
    "--add-data=config.ini;.",  # 添加配置文件
    "--version-file=version_info.txt",  # 添加版本信息
    # 隱藏導(dǎo)入
    "--hidden-import=pandas",
    "--hidden-import=openpyxl",
    "--hidden-import=requests",
    # 排除模塊減小體積
    "--exclude-module=tkinter",
    "--exclude-module=matplotlib",
]

# 添加圖標(biāo)(如果存在)
if os.path.exists("app_icon.ico"):
    pyinstaller_args.append("--icon=app_icon.ico")
else:
    print("警告: 未找到應(yīng)用圖標(biāo) (app_icon.ico)")

# 執(zhí)行打包
print(f"開始打包 {app_name}...")
print("這可能需要幾分鐘,請(qǐng)耐心等待...")
PyInstaller.__main__.run(pyinstaller_args)

# 打包后處理
dist_path = os.path.join("dist", f"{app_name}.exe")
if os.path.exists(dist_path):
    print(f"\n? 打包成功!可執(zhí)行文件: {dist_path}")
    print("文件大小:", round(os.path.getsize(dist_path)/(1024*1024), 2), "MB")
else:
    print("\n? 打包失敗,請(qǐng)檢查錯(cuò)誤信息")

# 資源文件說明
print("\n請(qǐng)將以下文件與可執(zhí)行文件放在同一目錄:")
print("  - README.md   使用說明")
print("  - config.ini  配置文件")

input("\n按 Enter 鍵退出...")

常見問題解決方案

1. 打包后文件過大

解決方案

使用虛擬環(huán)境打包(避免包含不必要的包)

添加排除參數(shù):--exclude-module=未使用的模塊

使用 UPX 壓縮:

pyinstaller_args.append("--upx-dir=path/to/upx")

2. 缺少依賴模塊

解決方案

  • 在打包腳本中添加 --hidden-import=缺失模塊
  • 檢查是否有動(dòng)態(tài)導(dǎo)入(如 __import__()importlib
  • 使用 pyi-archive_viewer 分析打包內(nèi)容

3. 資源文件找不到

解決方案

使用正確格式:--add-data="源文件;目標(biāo)目錄"

在代碼中使用兼容路徑訪問:

def resource_path(relative_path):
    """ 獲取資源的絕對(duì)路徑 """
    if hasattr(sys, '_MEIPASS'):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# 使用示例
readme_path = resource_path("README.md")

4. 防病毒軟件誤報(bào)

解決方案

  • 使用最新版 PyInstaller(減少誤報(bào))
  • 對(duì)可執(zhí)行文件進(jìn)行數(shù)字簽名
  • 在下載頁面添加說明,讓用戶信任文件

打包最佳實(shí)踐

版本自動(dòng)化

# 從代碼中獲取版本號(hào)
import video_data_collector
VERSION = video_data_collector.__version__

日志記錄

# 在打包腳本中添加日志
import logging
logging.basicConfig(filename='build.log', level=logging.INFO)

多平臺(tái)支持

# 處理不同操作系統(tǒng)的路徑分隔符
if sys.platform.startswith('win'):
    data_separator = ";"
else:
    data_separator = ":"

pyinstaller_args.append(f"--add-data=README.md{data_separator}.")

自動(dòng)復(fù)制資源文件

# 打包完成后自動(dòng)復(fù)制資源文件
import shutil
for resource in ["README.md", "config.ini"]:
    shutil.copy(resource, "dist")

到此這篇關(guān)于如何使用Python腳本控制PyInstaller打包實(shí)戰(zhàn)詳解的文章就介紹到這了,更多相關(guān)PyInstaller打包腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能示例

    Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能,結(jié)合實(shí)例形式分析了Python基于wmi模塊的遠(yuǎn)程連接與進(jìn)程操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-06-06
  • 使用Python-OpenCV消除圖像中孤立的小區(qū)域操作

    使用Python-OpenCV消除圖像中孤立的小區(qū)域操作

    這篇文章主要介紹了使用Python-OpenCV消除圖像中孤立的小區(qū)域操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python turtle實(shí)現(xiàn)貪吃蛇游戲

    Python turtle實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了Python turtle實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python 5種常見字符串去除空格操作的方法

    Python 5種常見字符串去除空格操作的方法

    這篇文章主要給大家分享的是Python 5種常見字符串去除空格操作的方法,包括有strip()方法、rstrip()方法、replace()方法、join()方法+split()方法,下面文章是詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • 基于python實(shí)現(xiàn)matlab filter函數(shù)過程詳解

    基于python實(shí)現(xiàn)matlab filter函數(shù)過程詳解

    這篇文章主要介紹了基于python實(shí)現(xiàn)matlab filter函數(shù)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python實(shí)戰(zhàn)之實(shí)現(xiàn)簡單的名片管理系統(tǒng)

    Python實(shí)戰(zhàn)之實(shí)現(xiàn)簡單的名片管理系統(tǒng)

    這篇文章主要介紹了Python實(shí)戰(zhàn)之實(shí)現(xiàn)簡單的名片管理系統(tǒng),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python如何獲取文件當(dāng)前位置和定位某個(gè)位置

    python如何獲取文件當(dāng)前位置和定位某個(gè)位置

    這篇文章主要介紹了python如何獲取文件當(dāng)前位置和定位某個(gè)位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python面向?qū)ο笾惖亩x與繼承用法示例

    Python面向?qū)ο笾惖亩x與繼承用法示例

    這篇文章主要介紹了Python面向?qū)ο笾惖亩x與繼承用法,結(jié)合實(shí)例形式分析了Python類的定義、實(shí)例化、繼承等基本操作技巧,需要的朋友可以參考下
    2019-01-01
  • Python如何顯示所有漢字

    Python如何顯示所有漢字

    這篇文章主要介紹了Python如何顯示所有漢字問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • python Django框架中的嵌套序列化器詳解

    python Django框架中的嵌套序列化器詳解

    在Web開發(fā)領(lǐng)域,創(chuàng)建和使用API(應(yīng)用程序編程接口)是很常見的,Django Rest Framework(DRF)是一個(gè)強(qiáng)大的工具包,在DRF中,一個(gè)關(guān)鍵概念是序列化器,在本文中,我們將深入研究Django中嵌套序列化器的概念以及它們?nèi)绾未龠M(jìn)復(fù)雜數(shù)據(jù)關(guān)系的處理,需要的朋友可以參考下
    2023-10-10

最新評(píng)論