You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyInstaller生成可执行文件时如何引入依赖包并实现轻量化?

问题描述

尝试创建.exe文件时遇到依赖包导入错误,已配置hiddenimports:

hiddenimports=['pandas', 'sys', 'os', 'tkinter', 'requests', 'openpyxl']

在虚拟环境中执行了以下PyInstaller打包命令:

pyinstaller --noconsole --name="Display Catalog" --icon="icone.ico" --add-data="icone.ico;." --hidden-import pandas --hidden-import sys --hidden-import os --hidden-import tkinter --hidden-import requests --hidden-import openpyxl --onefile main.py

但运行生成的.exe时出现如下错误:

Traceback (most recent call last):
  File "main.py", line 5, in <module>
ModuleNotFoundError: No module named 'openpyxl'

需要解决两个核心问题:

  1. 如何将所有依赖包正确包含到.exe中
  2. 如何让生成的.exe保持轻量化,方便分享给没有Python及相关依赖的用户
解决方法

一、修复openpyxl导入失败问题

  • 确认虚拟环境已装全依赖:
    运行下面的命令,确保openpyxl和其他依赖都在当前虚拟环境中正确安装:

    pip install openpyxl pandas requests tkinter
    

    (PyInstaller只会打包当前环境已安装的包,漏装依赖是最常见的原因)

  • 用spec文件统一管理打包配置:
    不要同时在命令行和spec文件里重复配置hiddenimports,建议用spec文件更清晰:

    1. 先生成基础spec文件:
      pyinstaller --noconsole --name="Display Catalog" --icon="icone.ico" --add-data="icone.ico;." --onefile main.py
      
    2. 打开生成的Display Catalog.spec文件,找到hiddenimports字段,修改为:
      hiddenimports=['openpyxl', 'pandas._libs.tslibs.timedeltas']
      
      (sys、os、tkinter属于Python标准库,PyInstaller会自动识别,无需手动添加;pandas部分功能依赖隐式导入的包,需要额外指定)
    3. 用spec文件重新打包:
      pyinstaller "Display Catalog.spec"
      
  • 极端情况:强制指定openpyxl路径:
    如果还是报错,在spec文件的datas列表里添加openpyxl的安装路径:

    datas=[('路径/to/openpyxl', 'openpyxl')]
    

    路径可以通过pip show openpyxl命令查看Location字段获取,拼接上openpyxl文件夹即可得到完整路径。

二、实现.exe轻量化

  • 严格控制虚拟环境依赖:
    虚拟环境只装项目必需的包,不要安装开发工具(比如pytest、flake8),用pip list检查,把没用的包删掉。

  • 考虑用--onedir替代--onefile:
    --onefile会把所有文件打包成单个exe,运行时会自动解压到临时目录,体积更大且启动慢;--onedir会生成一个文件夹,包含exe和所有依赖文件,体积更小、启动更快,分享时把整个文件夹压缩即可。

  • 清理冗余依赖:

    • 如果只是简单读写Excel,直接用openpyxl替代pandas能大幅减少体积;
    • 用pip-autoremove工具清理未被依赖的包:
      pip install pip-autoremove
      pip-autoremove 多余包名称 -y
      
  • 用UPX压缩exe:
    下载UPX压缩工具,打包时添加--upx-dir参数指定UPX路径,能有效压缩exe体积:

    pyinstaller --upx-dir="path/to/upx文件夹" "Display Catalog.spec"
    

内容的提问来源于stack exchange,提问作者CED

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:42:15