PyInstaller打包爬虫EXE遇FileNotFoundError:user_agent JSON文件缺失
解决PyInstaller打包后找不到user_agent库数据文件的问题
问题原因
user_agent库初始化时会读取内置的JSON数据文件(比如smartphone_dev_id.json),PyInstaller默认不会自动打包第三方库的非Python资源文件,所以打包后的EXE运行时,临时解压目录里缺少这些文件,导致报错。即使你替换了User-Agent为固定值,只要代码中导入了user_agent库,它的初始化逻辑还是会尝试加载这些文件。
解决方案
方案1:用--add-data参数打包资源文件
- 先找到
user_agent库的安装路径:
运行命令:pip show user_agent,查看输出里的Location字段,这是库的根目录。 - 构造打包命令(Windows系统):
比如如果Location是pyinstaller --onefile --add-data "【Location路径】\user_agent\data\*.json;user_agent\data" download.pyC:\Users\sa031\AppData\Local\Programs\Python\Python310\Lib\site-packages,命令就是:pyinstaller --onefile --add-data "C:\Users\sa031\AppData\Local\Programs\Python\Python310\Lib\site-packages\user_agent\data\*.json;user_agent\data" download.py- 注意:Windows路径分隔用分号
;,Mac/Linux用冒号:。 - 这个参数的作用是把指定的JSON文件打包进EXE,运行时会解压到临时目录的
user_agent/data下,和库预期的路径匹配。
- 注意:Windows路径分隔用分号
方案2:彻底移除user_agent库的依赖(推荐,如果你已经不用它生成UA)
既然你已经把User-Agent换成了固定值,直接删除代码中所有和user_agent相关的导入语句(比如import user_agent或者from user_agent import ...)以及相关代码,这样就不会触发库的初始化逻辑,自然不会报错。
方案3:通过.spec文件配置资源打包
- 先生成默认的spec文件:
pyinstaller --onefile download.py - 打开生成的
download.spec文件,找到datas字段,添加资源路径配置:datas = [ ('【Location路径】/user_agent/data/*.json', 'user_agent/data') ] - 用spec文件重新打包:
pyinstaller download.spec
内容的提问来源于stack exchange,提问作者Jung Woo Sohn
相关产品推荐
相关产品推荐

