pkg_resources报错本质是setuptools未安装、损坏或版本不兼容;需先卸载setuptools与distribute,再指定安装setuptools==79.0.1,并用python -m pip确保环境一致。

pkg_resources 不是独立模块,它是 setuptools 安装后自动提供的子模块。报 ModuleNotFoundError: No module named 'pkg_resources',本质就是 setuptools 没装、装坏了、或版本不兼容——不是 Python 本身的问题,也不是你代码写错了。
为什么重装 setuptools 还会失败?
常见现象:执行 pip install --upgrade setuptools 后仍报错,甚至 pip list 里能看到 setuptools,但 import pkg_resources 就崩。
- Python 环境混用:比如用系统 Python 装了 setuptools,却在虚拟环境里运行脚本(或反之),
pip和python指向不同环境 - 残留的
distribute包:老项目可能残留distribute(已废弃,与setuptools冲突),它会干扰pkg_resources的加载 - setuptools 版本过高:2026 年部分新版本(如 79.5+)在某些 Python 3.9–3.11 环境中存在导入路径 bug;实测
setuptools==79.0.1在多数场景下更稳 - 安装被中断或权限不足:导致
pkg_resources的__init__.py文件缺失或为空
怎么验证和修复 setuptools 安装状态?
别只信 pip list,要直接测试模块是否可导入:
python -c "import pkg_resources; print(pkg_resources.__file__)"
如果报错,按顺序执行:
- 先彻底卸载:
pip uninstall -y setuptools distribute(必须加distribute) - 再指定版本重装:
pip install setuptools==79.0.1(不用--upgrade,避免跳过降级) - 检查是否装进对的环境:
which python和which pip输出路径必须一致;Windows 用户用where python和where pip - 如果用 conda,别混用 pip:优先
conda install setuptools=79.0.1,避免 pip/conda 锁冲突
PyInstaller 打包时出现 pkg_resources.DistributionNotFound 怎么办?
这不是安装问题,是打包机制漏掉了 .dist-info 元数据目录。加 --hidden-import pkg_resources 没用,因为错误根源不是模块没导入,而是 get_distribution("xxx") 找不到对应包的元信息文件。
- 最简方案:用 PyInstaller 的
--collect-all参数强制打包元数据,例如:pyinstaller --collect-all google_api_python_client main.py - 更精准做法:手动写 hook 文件,比如
hook-google_api_python_client.py,内容为:from PyInstaller.utils.hooks import collect_data_files datas = collect_data_files('google_api_python_client'),然后通过--additional-hooks-dir=.引入 - 注意:所有用到
entry_points、__version__从元数据读取、或调用pkg_resources.resource_string()的库,都得按同样逻辑处理
真正容易被忽略的点:同一个 Python 解释器下,pip install 和 python -m pip install 可能走不同路径;出问题时,务必统一用 python -m pip 操作,确保跟运行脚本的是同一个 pip 实例。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











