跳到主要内容
版本 下一

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 团队

  1. 更新 clients 以使用 importlib.metadata 而非 pkg_resources
  2. 审查其他内部包 是否使用了 pkg_resources
  3. 一旦所有包都迁移,使用 setuptools >= 61.0.0 进行测试
  4. 监控 Datadog 日志 以获取类似的弃用警告

对于 Superset 维护者

  1. ✅ 已使用 importlib.metadata
  2. 监控第三方依赖的更新
  3. 一旦生态系统准备就绪,更新 setuptools 锁定版本

时间线

  • 2025-11-30: 预期从 setuptools 中移除 pkg_resources
  • 在此之前: 所有依赖必须迁移到 importlib.metadata

参考资料

监控

使用 Datadog 跟踪生产环境中的此问题

  • 警告模式: pkg_resources is deprecated as an API
  • 组件: @component:app
  • 环境: environment:production