Python新闻摘要工具打包为exe后出现Article.download() 404错误如何解决
问题原因及解决方案
该报错并非网络连接导致,核心问题是打包为exe后依赖资源、底层库的适配缺失,具体原因和对应解决方法如下:
1. nltk资源路径异常
你代码中每次执行summarize()函数都会调用nltk.download('punkt'),py文件运行时资源会默认下载到当前用户的nltk_data目录,程序可正常读取;但打包为exe后,运行时的临时工作目录和用户目录路径不匹配,程序无法找到已下载的punkt分词资源,会触发后续解析异常,误报URL不存在。
解决办法:
- 先本地手动下载punkt资源,放到和py文件同级的
nltk_data/tokenizers目录下 - 在代码开头添加路径适配代码,兼容打包后的运行环境:
import os import sys # 适配打包后的临时路径 if getattr(sys, 'frozen', False): base_path = sys._MEIPASS else: base_path = os.path.dirname(os.path.abspath(__file__)) nltk.data.path.append(os.path.join(base_path, 'nltk_data'))
- 打包时将整个nltk_data文件夹一起打进包内,用pyinstaller的话对应添加参数:
- Windows系统:
--add-data "nltk_data;nltk_data" - Mac/Linux系统:
--add-data "nltk_data:nltk_data"
- Windows系统:
2. newspaper库打包依赖缺失
newspaper库底层依赖lxml、PIL、requests等多个库的动态链接文件,默认打包时不会全部收录,会导致article.download()、article.parse()步骤执行异常,触发URL not found的通用报错。
解决办法:
打包时显式指定导入newspaper的依赖项,pyinstaller打包命令添加如下参数:
--hidden-import newspaper --hidden-import lxml --hidden-import PIL --hidden-import requests
如果你安装的是newspaper3k版本,将上面的newspaper替换为newspaper3k即可。
优化建议
- 把
nltk.download('punkt')移到程序初始化位置,不要放在summarize函数内,避免每次点击按钮都重复下载资源 - 给URL解析步骤添加异常捕获,方便定位具体报错原因,避免抛出通用模糊报错:
try: article = Article(url) article.download() article.parse() article.nlp() except Exception as e: # 可自行添加弹窗提示逻辑展示具体错误 print(f"处理失败:{str(e)}") return
额外排查点
如果上述操作完成后还是报错,检查运行exe的设备是否开启了代理、防火墙或者杀毒软件拦截了程序的网络请求,手动给exe添加白名单即可。
内容的提问来源于stack exchange,提问作者vincent owen
相关产品推荐
相关产品推荐

