解决 TensorBoard 启动时 “No module named 'pkg_resources'” 问题

问题现象

在 Pointcept 项目中,启动 TensorBoard 查看训练日志时出现如下错误:

java 复制代码
tensorboard.exe --logdir exp/default
Traceback (most recent call last):
  ...
  from tensorboard import default
  File "...\tensorboard\default.py", line 30, in <module>
    import pkg_resources
ModuleNotFoundError: No module named 'pkg_resources'

环境信息

  • 操作系统:Windows
  • Python 版本:3.10.18
  • 包管理器:uv(也可用 pip
  • 虚拟环境:.venv
  • TensorBoard 版本:2.20.0

排查过程

1. 确认 setuptools 已安装

复制代码
uv pip list | findstr setuptools
setuptools                82.0.1

2. 测试导入 pkg_resources

vbnet 复制代码
python -c "import pkg_resources; print('OK')"
ModuleNotFoundError: No module named 'pkg_resources'

3. 检查虚拟环境中的 setuptools 目录

vbnet 复制代码
Get-ChildItem .venv\Lib\site-packages\setuptools

发现目录存在,但没有顶层的 pkg_resources 模块 。进一步查看 _vendor 子目录:

vbnet 复制代码
Get-ChildItem .venv\Lib\site-packages\setuptools_vendor

其中包含大量第三方依赖,但依然没有 pkg_resources 模块。

4. 强制重装 setuptools 无效

scss 复制代码
uv pip install --force-reinstall --no-cache-dir setuptools
python -c "import pkg_resources; print('OK')"   # 仍然报错

根本原因

setuptools v66.0.0 开始 ,官方将 pkg_resources 从顶层模块移到了内部 _vendor 包中,不再作为独立的顶级模块提供。然而,TensorBoard 的 default.py 中仍然使用 import pkg_resources(顶层导入),因此在新版 setuptools 环境下会触发 ModuleNotFoundError

更早的 setuptools 版本(如 59.8.0)仍然提供 pkg_resources 作为顶层模块。

解决方案

将 setuptools 降级到 59.8.0 即可恢复 pkg_resources 模块。

bash 复制代码
# 卸载当前版本
uv pip uninstall setuptools

# 安装兼容版本
uv pip install setuptools==59.8.0

# 验证
python -c "import pkg_resources; print('OK')"   # 输出 OK

# 启动 TensorBoard
python -m tensorboard.main --logdir exp/default

之后 TensorBoard 正常运行。

替代方案(不推荐)

如果必须使用新版 setuptools,可以手动创建一个 pkg_resources.py 文件,内容为:

javascript 复制代码
from setuptools._vendor import pkg_resources

放置于 .venv\Lib\site-packages 目录下。但此方法可能因 _vendor 内部结构变化而失效,不推荐在生产环境中使用。

经验总结

  1. 不要盲目升级依赖:新版本可能移除旧 API,导致依赖它的工具(如 TensorBoard)崩溃。
  2. 遇到 pkg_resources 缺失时,优先检查 setuptools 版本pip show setuptools 查看版本,若 >= 66,降级到 59.x 即可。
  3. 使用虚拟环境锁定依赖版本 :在 requirements.txtpyproject.toml 中固定 setuptools<60 可避免后续意外升级。

参考链接

相关推荐
DevNo9 分钟前
英文会议转中文纪要,三款AI工具实测体验
人工智能
深小乐12 分钟前
AI 说话越来越难懂?Anthropic 员工都在用 ELI5 这个图解 Skill
人工智能
问天_观心15 分钟前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
甲维斯21 分钟前
我要吹爆GPT6了!实测3列惊为天人!
人工智能
指掀涛澜天下惊30 分钟前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
pnoker34 分钟前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
Fnetlink11 小时前
Fnet 云网安 260904
网络·人工智能·安全·web安全·网络安全
ZGIAI1 小时前
Agent 越来越强,企业为什么反而更需要“运行层”?
人工智能·架构
ZGIAI1 小时前
企业级 Agent 平台开源:ZGI 把模型、知识库、Skills 和 Workflow 放进同一个 Runtime
人工智能·架构
葡萄城技术团队1 小时前
表格智能体系列 · 7:让 AI 的操作可以反悔
人工智能