pkg_resources 弃用和迁移指南
背景
自 setuptools 61.0.0 (计划于 2025-11-30 左右移除) 起,pkg_resources API 已被弃用并将被移除。这会影响 Python 生态系统中的几个包。
当前状态
Superset 代码库 ✅
Superset 代码库已从 pkg_resources 迁移到现代的 importlib.metadata API
superset/db_engine_specs/__init__.py:36- 使用from importlib.metadata import entry_points- 所有入口点加载都使用现代 API
生产依赖 ⚠️
一些第三方依赖可能仍在使用 pkg_resources
clients包 (Preset 特有): 在const.py中使用pkg_resources- 错误路径:
/usr/local/lib/python3.10/site-packages/clients/const.py:1
迁移路径
短期解决方案 (当前)
将 setuptools 锁定到 60.x 版本以防止破坏性更改
# requirements/base.in
setuptools<81
这可以在依赖包更新时防止 pkg_resources 的移除。
长期解决方案
更新所有依赖以使用 importlib.metadata 而非 pkg_resources
迁移示例
旧 (已弃用)
import pkg_resources
version = pkg_resources.get_distribution("package_name").version
entry_points = pkg_resources.iter_entry_points("group_name")
新 (推荐)
from importlib.metadata import version, entry_points
pkg_version = version("package_name")
eps = entry_points(group="group_name")
行动项
对于 Preset 团队
- 更新
clients包 以使用importlib.metadata而非pkg_resources - 审查其他内部包 是否使用了
pkg_resources - 一旦所有包都迁移,使用 setuptools >= 61.0.0 进行测试
- 监控 Datadog 日志 以获取类似的弃用警告
对于 Superset 维护者
- ✅ 已使用
importlib.metadata - 监控第三方依赖的更新
- 一旦生态系统准备就绪,更新 setuptools 锁定版本
时间线
- 2025-11-30: 预期从 setuptools 中移除
pkg_resources - 在此之前: 所有依赖必须迁移到
importlib.metadata
参考资料
监控
使用 Datadog 跟踪生产环境中的此问题
- 警告模式:
pkg_resources is deprecated as an API - 组件:
@component:app - 环境:
environment:production