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

使用auto-py-to-exe打包Python程序缺失browserforge依赖文件求助

解决auto-py-to-exe打包browserforge库时缺失文件的问题

问题场景

运行auto-py-to-exe打包生成的main.exe时触发FileNotFoundError,程序无法找到browserforge依赖的JSON资源文件,错误日志如下:

C:\Users\jacob\Documents\output>main.exe
browser-helper-file.json ----------------------------------------   0% 0/? bytes ?
header-network.json      ----------------------------------------   0% 0/? bytes ?
headers-order.json       ----------------------------------------   0% 0/? bytes ?
input-network.json       ----------------------------------------   0% 0/? bytes ?
fingerprint-network.json ----------------------------------------   0% 0/? bytes ?
Traceback (most recent call last):
  File "main.py", line 4, in <module>
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "browserforge\injectors\__init__.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "browserforge\injectors\utils.py", line 8, in <module>
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 378, in exec_module
  File "browserforge\fingerprints\__init__.py", line 3, in <module>
  File "browserforge\download.py", line 159, in DownloadIfNotExists
  File "browserforge\download.py", line 150, in Download
  File "asyncio\runners.py", line 194, in run
  File "asyncio\runners.py", line 118, in run
  File "asyncio\base_events.py", line 687, in run_until_complete
  File "browserforge\download.py", line 145, in AsyncDownload
  File "browserforge\download.py", line 137, in download
  File "browserforge\download.py", line 111, in _download_and_extract
  File "browserforge\download.py", line 75, in _download_file
  File "aiofiles\base.py", line 63, in __aenter__
  File "aiofiles\base.py", line 59, in __await__
  File "aiofiles\threadpool\__init__.py", line 92, in _open
  File "concurrent\futures\thread.py", line 58, in run
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\jacob\\AppData\\Local\\Temp\\_MEI64042\\browserforge\\headers\\data\\browser-helper-file.json'
[PYI-7868:ERROR] Failed to execute script 'main' due to unhandled exception!

已尝试通过auto-py-to-exe添加缺失文件但无效,且在安装了所有依赖的虚拟环境中运行auto-py-to-exe。

解决方案

1. 准确定位browserforge资源文件

找到虚拟环境中browserforge的安装目录(示例路径:venv\Lib\site-packages\browserforge),确认headers\data、fingerprints\data等目录下的JSON文件是程序所需资源。

2. 正确配置auto-py-to-exe的附加文件

在auto-py-to-exe界面操作:

  • 切换到Additional Files标签页
  • 点击Add Folder,选择browserforge安装目录下的headers和fingerprints目录
  • 设置Destination为browserforge/,确保资源文件解压后位于临时目录的browserforge子目录下,与程序期望路径匹配

3. 代码中指定资源文件路径

如果GUI添加仍无效,在代码中通过PyInstaller提供的临时目录路径修正加载逻辑:

import sys
import os

# 获取打包后的临时目录,未打包时取当前脚本目录
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
# 拼接browserforge资源根路径
browserforge_root = os.path.join(base_path, 'browserforge')

# 若browserforge支持设置资源路径,在此配置(需参考库的API)
# 示例:
# import browserforge
# browserforge.config.set('data_path', browserforge_root)

4. 使用PyInstaller spec文件手动打包(更稳定)

若auto-py-to-exe的GUI配置存在问题,直接编写spec文件控制打包流程:

  1. 生成基础spec文件:
pyi-makespec main.py
  1. 编辑main.spec,在datas列表中添加browserforge资源:
a = Analysis(
    ['main.py'],
    datas=[
        # 格式:(源文件/目录路径, 打包后目标路径)
        ('venv/Lib/site-packages/browserforge/headers', 'browserforge/headers'),
        ('venv/Lib/site-packages/browserforge/fingerprints', 'browserforge/fingerprints'),
        # 根据需要添加其他资源目录
    ],
    # 其余配置保持默认
)
pyz = PYZ(a.pure, a.zipped_data)
exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='main',
    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. 执行打包命令:
pyinstaller main.spec

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:19:55