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

PyInstaller Tree路径找不到报错:如何打包etc文件夹及内容?

PyInstaller打包时无法定位etc文件夹的解决方法

问题情况

需要将项目根目录下的etc文件夹(含内部sbom.json文件)打包进PyInstaller生成的可执行文件,采用Tree方法配置spec文件后,执行pyinstaller fetch_sbom_packages.spec时触发错误:The system cannot find the path specified: '..\etc。

项目依赖说明:fetch_sbom_packages.py依赖同目录下的dsapi.py和shared.py,文件夹结构如下:
项目文件夹结构

原spec文件内容:

# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['fetch_sbom_packages.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    Tree('..\etc', prefix='etc\'),
    a.datas,
    [],
    name='fetch_sbom_packages',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

问题原因

  1. 路径转义错误:Python字符串中的反斜杠是转义字符,'..\etc'中的\e会被解析为转义序列,导致实际路径识别错误。
  2. Tree放置位置错误:Tree资源未添加到Analysis的datas列表中,而是直接放入EXE参数,PyInstaller无法正确收集该资源。
  3. 工作目录不匹配:若执行pyinstaller时不在spec文件所在的scripts目录,相对路径..\etc会指向错误的位置。

修复步骤

  1. 修正路径转义:使用Python原始字符串(前缀r)或双反斜杠表示路径,避免转义问题;同时prefix参数无需以反斜杠结尾,直接写etc即可。
  2. 调整Tree位置:将Tree添加到Analysis的datas列表中,让PyInstaller统一处理资源收集。
  3. 确认工作目录:执行打包命令前,确保当前终端处于scripts目录下(即spec文件所在目录)。

修改后的spec文件

# -*- mode: python ; coding: utf-8 -*-

a = Analysis(
    ['fetch_sbom_packages.py'],
    pathex=[],
    binaries=[],
    # 将Tree添加到datas,使用原始字符串避免路径转义
    datas=[Tree(r'..\etc', prefix='etc')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,  # 直接引用已包含Tree的a.datas
    [],
    name='fetch_sbom_packages',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

验证方法

打开终端,切换到scripts目录,执行命令:

pyinstaller fetch_sbom_packages.spec

打包完成后,可在dist/fetch_sbom_packages目录下找到包含etc文件夹的可执行文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:03:18