Repolode
asottile

asottile/pyupgrade

一个自动把 Python 代码改写为新版本语法的命令行工具和 pre-commit 钩子。

Star
4,126
Fork
229
未关闭 Issue
21
最近提交
3天前

这是什么?

pyupgrade 会直接改写 Python 源文件,把旧写法替换为新版本的语法和惯用写法。例如,将旧式字符串格式化改为 f-string 或 str.format,把 six 兼容代码替换为原生写法,并简化集合与字典推导式。通过 --py36-plus、--py310-plus 等参数可以指定目标版本,使改写结果与项目支持的最低 Python 版本保持一致。

工具可通过 pip 安装,在命令行中对一个或多个文件运行。它也提供 pre-commit 钩子,可在每次提交前自动处理暂存的文件。部分改写(如涉及类型注解的)仅在文件导入了 from __future__ import annotations 时生效,并可通过参数保留运行时的类型写法。

核心功能

  • 01将旧式字符串格式化改写为 f-string、str.format 及简化的字面量写法。
  • 02移除 six 及 Python 2/3 兼容代码,包括导入语句和版本判断。
  • 03通过 --py36-plus 至 --py315-plus 等参数指定目标 Python 版本。
  • 04在启用时可将类型注解改为 PEP 585、PEP 604 等新写法。
  • 05可作为 pre-commit 钩子处理暂存的文件。

适用场景

  • 在不逐个手动修改文件的情况下,提高旧项目的最低 Python 版本要求。
  • 迁移完成后,清理 Python 2 和 six 兼容代码。
  • 在团队仓库中通过 pre-commit 自动统一使用新语法。

快速上手

  1. 1

    使用 pip 安装 pyupgrade

    pip install pyupgrade
  2. 2

    或按 README 示例在 .pre-commit-config.yaml 中添加为 pre-commit 钩子

使用前须知

  • 许多改写只有在传入目标版本参数(如 --py36-plus 或 --py39-plus)时才会生效。

收录于专题

标签

#python#linter#pre-commit#code-modernization#syntax-upgrade#refactoring

常见问题

pyupgrade 是什么?
一个自动把 Python 代码改写为新版本语法的命令行工具和 pre-commit 钩子。 pyupgrade 会直接改写 Python 源文件,把旧写法替换为新版本的语法和惯用写法。例如,将旧式字符串格式化改为 f-string 或 str.format,把 six 兼容代码替换为原生写法,并简化集合与字典推导式。通过 --py36-plus、--py310-plus 等参数可以指定目标版本,使改写结果与项目支持的最低 Python 版本保持一致。
pyupgrade 可以免费使用吗?用的什么许可证?
pyupgrade 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
pyupgrade 还在维护吗?
活跃维护中。pyupgrade 最近一次提交是在 2026年11月4日。
pyupgrade 适合用来做什么?
在不逐个手动修改文件的情况下,提高旧项目的最低 Python 版本要求。 迁移完成后,清理 Python 2 和 six 兼容代码。 在团队仓库中通过 pre-commit 自动统一使用新语法。
pyupgrade 怎么安装和运行?
使用 pip 安装 pyupgrade: pip install pyupgrade 或按 README 示例在 .pre-commit-config.yaml 中添加为 pre-commit 钩子
在哪里获取 pyupgrade?
源代码和安装说明在 GitHub 上:https://github.com/asottile/pyupgrade

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目