解决 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 可避免后续意外升级。

参考链接

相关推荐
古城小栈5 分钟前
为啥说:训练用BF16,推理用FP16
人工智能·算法·机器学习
KaMeidebaby8 分钟前
卡梅德生物技术快报|蛋白 N 端测序在重组贻贝融合蛋白表征中的应用,解决原核表达序列偏移工艺难题
前端·人工智能·物联网·算法·百度
TMT星球12 分钟前
从像素复刻到行动控制:具身世界模型的底层逻辑探索
人工智能·深度学习·机器学习
ccimao631613 分钟前
散户做财报整理、研报阅读、复盘记录,各类AI工具适配环节梳理
大数据·人工智能
派叔16 分钟前
老字号营销服务商技术解构:三类方案的架构逻辑与选型评估
大数据·人工智能·搜索引擎·架构·产品运营·流量运营
Byron__23 分钟前
AI学习_06_短期记忆与长期记忆
人工智能·python·学习
万悉科技35 分钟前
实战:如何通过GEO原生内容结构化,让LLM稳定推荐你的品牌网站
大数据·人工智能·重构
董厂长39 分钟前
从 Claude Code 放弃 RAG 说起:实际项目中如何合理创建知识库
人工智能·llm
元岳数字人小元1 小时前
如何依托数字人源码做好私有化部署选型
人工智能·开源·人机交互·交互
Turbo正则1 小时前
群论在AI中的应用概述
人工智能·算法·抽象代数