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

PyInstaller打包Python程序后运行报错:缺失user_agent相关JSON文件

问题分析

这个错误是因为PyInstaller默认不会自动打包依赖库的静态资源文件——你提到的user_agent/data/smartphone_dev_id.json是user_agent库的内置资源(被wrpy或requests间接调用),打包时没被包含到exe中,导致运行时临时解压后找不到文件,且错误出现在你的代码执行前,说明是依赖库初始化阶段就需要读取这个文件。

解决方法

方案1:手动指定资源打包(推荐)

  • 找到你的conda环境中user_agent库的安装路径,Windows下一般是{你的conda环境文件夹}/Lib/site-packages/user_agent,比如C:\Users\你的用户名\.conda\envs\你的环境名\Lib\site-packages\user_agent
  • 生成PyInstaller的spec配置文件(如果还没生成过):
    pyi-makespec 你的脚本文件名.py
    
  • 打开生成的你的脚本文件名.spec,修改datas参数,把user_agent的data目录添加进去:
    datas = [
        (r"C:\Users\你的用户名\.conda\envs\你的环境名\Lib\site-packages\user_agent\data", "user_agent/data")
    ]
    
    注意替换成你自己的实际路径,Windows路径加r前缀避免转义出错
  • 用spec文件重新打包:
    pyinstaller 你的脚本文件名.spec
    

方案2:修改代码路径(临时调试用)

  • 在代码最开头(所有导入wrpy、requests之前)添加这段代码,手动覆盖user_agent的资源路径:
    import sys
    import os
    from pathlib import Path
    
    # 判断是否是PyInstaller打包后的环境
    if getattr(sys, 'frozen', False):
        base_path = sys._MEIPASS  # 打包后的临时解压目录
    else:
        base_path = os.path.dirname(os.path.abspath(__file__))  # 开发环境的脚本目录
    
    # 手动设置user_agent的资源目录
    import user_agent
    user_agent.DATA_DIR = Path(base_path) / "user_agent" / "data"
    

方案3:用--add-data参数直接打包

  • 不需要生成spec文件,直接在打包命令里加资源路径:
    # Windows系统用分号分隔源和目标路径
    pyinstaller --add-data "C:\Users\你的用户名\.conda\envs\你的环境名\Lib\site-packages\user_agent\data;user_agent/data" 你的脚本文件名.py
    

内容的提问来源于stack exchange,提问作者Vénon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:33:34