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

如何让PyInstaller生成的exe读取指定外部_internal目录以缩减部署体积

配置PyInstaller让exe从指定路径读取依赖文件夹

可以通过自定义runtime hook修改PyInstaller的默认依赖搜索路径,实现让小体积exe从固定目录读取庞大的依赖文件夹,具体步骤如下:

步骤1:创建依赖路径配置的hook脚本

新建一个set_deps_path.py文件,写入以下代码:

import sys

# 指定目标机器上的固定依赖目录路径
FIXED_DEPS_DIR = r"C:\Program Files\MyAppDeps v3\_internal"

# 覆盖PyInstaller的内部依赖路径变量
if hasattr(sys, '_MEIPASS'):
    sys._MEIPASS = FIXED_DEPS_DIR
# 将固定依赖目录加入系统搜索路径
sys.path.insert(0, FIXED_DEPS_DIR)

步骤2:生成并修改spec文件

  1. 先为你的应用生成spec文件,运行命令:
pyi-makespec your_main_script.py
  1. 打开生成的.spec文件,在Analysis部分的runtime_hooks参数中添加刚才创建的hook脚本路径:
a = Analysis(
    ['your_main_script.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    # 添加runtime hook
    runtime_hooks=['set_deps_path.py'],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=None,
    noarchive=False,
)

其余部分保持默认即可。

步骤3:基于修改后的spec文件打包

运行打包命令,指定使用修改后的spec文件:

pyinstaller your_main_script.spec

关键注意事项

  • 确保目标机器上的C:\Program Files\MyAppDeps v3\_internal目录存在,且内部文件结构与你首次打包生成的_internal完全一致(包括所有依赖文件、目录层级),PyInstaller对依赖路径和文件名的匹配要求严格。
  • 第三方依赖更新时,重新打包生成新的_internal文件夹,部署到目标机器的固定路径;日常应用更新仅需分发新的小体积exe即可。
  • 测试阶段先将_internal文件夹放到指定路径,运行exe验证是否能正常加载所有依赖,排查找不到模块或资源的问题。
  • 如果应用包含自定义数据文件/资源,需在spec文件的datas部分配置正确的路径映射,确保这些文件也能在固定依赖目录中被找到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:43:13