跳过正文
  1. Posts/

你的项目还在跑 Python 3.9 吗?我写了个工具来盯着这件事

·849 字·2 分钟· ·
沈显鹏
作者
沈显鹏
Engineer. Builder. Maintainer.
目录
我的开源工具 - 这篇文章属于一个选集。
§ 2: 本文

你的项目还在跑 Python 3.9 吗?我写了个工具来盯着这件事
#

上个月,Python 3.9 正式 EOL 了。

EOL,End of Life——官方停止维护,不再修安全漏洞。如果你的项目还在跑 3.9,理论上你就在裸奔。

但现实是:大多数人不会专门去盯这件事。pyproject.toml 写完就忘了,Dockerfile 里的基础镜像版本从来没动过,GitHub Actions 里的 Python 版本也是两年前配的。等你想起来检查,往往已经过了好几个月。

我最近发布了 py-eol v1.0.0,专门用来解决这个问题。


它做一件事:告诉你 Python 版本快到期了
#

pip install py-eol

装好之后,可以直接查版本状态:

py-eol versions 3.9
# ⚠️ Python 3.9 is already EOL since 2025-10-31

py-eol versions 3.10 --warn-before 180
# ⏰ Python 3.10 will be EOL on 2026-10-31 (229 days remaining)

py-eol versions 3.12
# ✅ Python 3.12 is still supported until 2028-10-31

--warn-before DAYS 是我觉得最实用的参数——不想等到 EOL 当天才知道,提前 N 天就开始报警,给团队留出迁移时间。


扫描项目文件,精确到行号
#

更实用的是直接扫描整个项目:

py-eol files pyproject.toml Dockerfile .github/workflows/ci.yml

输出会告诉你哪个文件、第几行用了 EOL 的版本:

pyproject.toml:9: ⚠️ Python 3.7 is already EOL since 2023-06-27
.github/workflows/ci.yml:16: ⚠️ Python 3.9 is already EOL since 2025-10-31
Dockerfile:1: ⚠️ Python 3.8 is already EOL since 2024-10-07

支持的文件类型:pyproject.tomlsetup.py.python-versiontox.iniDockerfile、GitHub Actions workflow 文件。


接入 CI,让检查自动跑
#

GitHub Action
#

- name: Check Python EOL
  uses: shenxianpeng/py-eol@main
  with:
    warn-before: "180"

每次 push 或 PR 自动检查,发现问题直接让流水线失败。也可以配定时任务,每周一早上主动跑一次:

on:
  schedule:
    - cron: "0 8 * * 1"

pre-commit hook
#

repos:
  - repo: https://github.com/shenxianpeng/py-eol
    rev: v1.0.0
    hooks:
      - id: py-eol

每次 commit 之前自动扫描,有问题当场拦住。


也可以当 Python 模块用
#

from py_eol import is_eol, get_eol_date, days_until_eol, is_eol_soon
from py_eol import supported_versions, eol_versions, latest_supported_version

print(is_eol("3.7"))               # True
print(days_until_eol("3.12"))      # 还有多少天
print(is_eol_soon("3.10", 365))    # True,如果一年内到期
print(supported_versions())        # 当前所有受支持版本列表
print(latest_supported_version())  # 3.14

退出码
#

退出码含义
0全部版本在支持期内
1发现 EOL 版本(或即将到期)
2遇到未知版本

方便直接在 shell 脚本和 CI 里做判断。


Python 版本的生命周期管理,是大多数团队的盲区——不是不知道 EOL 这件事,而是它不紧急、不显眼,总被优先级更高的事情挤掉。

py-eol 的目的很简单:把这件事从「需要人主动记住」变成「CI 自动提醒你」。

如果你维护着 Python 项目,装上试试,说不定会发现有几个版本早就该升了。

https://github.com/shenxianpeng/py-eol

我的开源工具 - 这篇文章属于一个选集。
§ 2: 本文

相关文章

用了 AI 之后,我反而更忙了

·1050 字·3 分钟
效率提升了,但工作量并没有减少,反而更多。需求变快、节奏变快,外界的期待也随之水涨船高——「你不是在用 AI 吗,怎么还没做完?」压力不是消失了,是换了一种形式。

找工作难?你可能还在用十年前的方式竞争

·1044 字·3 分钟
最近有个读者给我发私信,说现在找到工作很难,让我帮看看简历,想问问我有没有什么找工作的建议。现在的就业市场,似乎比以前更看重你可以做什么,做过什么。换句话说,学历重要,但能力更重要。

感谢 Canonical 的慷慨捐赠,让 badgepy 得以继续免费开源

·805 字·2 分钟
今天无意中发现,Canonical 已经连续四个月通过 thanks.dev 给我捐款支持 badgepy 的开发了。虽然金额不大,但这个反馈对我来说意义重大。它让我意识到,有时候我们只要坚持做对的事情,不去过多担心回报,结果可能会在一个完全意想不到的地方,以一种温暖的方式给你反馈。