Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Drop Python 3.9 support (cleanup checklist)

未关闭
#279 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
重构
描述清晰度
基本清楚
活跃度
冷清
技术栈
python

调研方向

先从四个仓库的 pyproject.toml 文件和 CI 矩阵开始,然后检查列出的 Python 文件以及 policyengine.py 的 Ruff 和 mypy 配置。在更改条件项之前,检查依赖版本和现有的 3.9 兼容性工作。完成的标准是四个仓库都支持 Python 3.10+、CI 通过,并且全新的 3.10 环境能够安装 us 和 uk extras。

由索引模型根据 Issue 内容生成。

描述

Trigger

File when all confirmed 3.9 users (currently: Census) have migrated to 3.10+.

Background

Supporting 3.9 across the stack required working around non-trivial syntax and dependency cruft in four repos. ~95% of the cruft is 3.9-specific — dropping 3.9 alone recovers most of it, even if 3.10 support remains (3.10 hits EOL Oct 2026, ~6 months out, so keeping it through natural life is cheap).

Landed as: PolicyEngine/policyengine-core#454, PolicyEngine/policyengine-us#8035, PolicyEngine/policyengine-uk#1625, PolicyEngine/policyengine.py#278.

Checklist

All 4 repos
  • pyproject.toml: raise requires-python from >=3.9 to >=3.10
  • Remove Programming Language :: Python :: 3.9 classifier
  • Remove "3.9" from all CI Python matrices
policyengine-core (PolicyEngine/policyengine-core)
  • Remove numpy env marker; go back to single numpy>=2.1.0,<3 (2.1+ supports 3.10+)
  • Hand-revert Optional[X]/Tuple[X] → X | None/tuple[X] in policyengine_core/tools/hugging_face.py and policyengine_core/tools/google_cloud.py (~5 sites; this repo's ruff config doesn't have UP rules enabled)
policyengine-us (PolicyEngine/policyengine-us)
  • Remove [tool.uv] environments block in pyproject.toml if it still exists (likely already gone once downstream core picks up 3.9-compat release)
  • Hand-revert Optional[X] → X | None in: policyengine_us/system.py, data/economic_assumptions.py, data/dataset_schema.py, tests/core/test_payroll_contributions.py, tests/microsimulation/data/fixtures/test_extend_single_year_dataset.py (5 sites)
  • Regenerate uv.lock
policyengine-uk (PolicyEngine/policyengine-uk)
  • Remove [tool.uv] environments block (if still present)
  • Hand-revert 3 sites in policyengine_uk/data/dataset_schema.py and policyengine_uk/simulation.py
  • policyengine_uk/tests/test_build_metadata.py: revert ExitStack back to parenthesized with (a, b, c):
  • [tool.ruff] target-version = "py39" → "py310"
  • Regenerate uv.lock
policyengine.py (this repo)
  • pyproject.toml:
    • [tool.ruff] target-version = "py39" → "py310"
    • [tool.mypy] python_version = "3.9" → "3.10"
    • Remove UP006, UP007, UP035, UP045 from [tool.ruff.lint] ignore
  • Auto-revert ~210 annotation sites: ruff check --fix --unsafe-fixes . — this re-applies UP045 (Optional[X] → X | None), UP007 (Union[X, Y] → X | Y), UP006/UP035 (List → list).
  • Hand-revert the two discriminated-union sites ruff's UP rules don't cover: src/policyengine/core/scoping_strategy.py:222 (inside Annotated[]) and src/policyengine/core/region.py:18 (module-level type alias).
  • Simplify Python-Compat CI job in .github/workflows/pr_code_changes.yaml — drop the explicit h5py install (needed because scoping_strategy.py imports it but extras weren't available; once [us]/[uk] extras are bumped to versions that pull h5py via core, it's redundant).
  • Bump [us]/[uk]/[dev] extras off policyengine-us==1.602.0 / policyengine-uk==2.74.0 to versions that don't pin 3.11+ themselves (separate follow-up from this cleanup — may already be bumped by the time this issue is actioned).

Not in scope

Keep until 3.10 EOL (October 2026):

  • class Foo(str, Enum) pattern (4 files: outputs/{aggregate,change_aggregate,inequality,poverty}.py) — StrEnum is 3.11+
  • timezone.utc in core/tax_benefit_model_version.py — datetime.UTC is 3.11+
  • Gotcha when StrEnum returns: str(Foo.X) differs — StrEnum returns "x", (str, Enum) returns "Foo.X". Audit any code relying on str() of enum members before reverting.

Keep until 3.12 EOL (October 2028):

  • TypeVar + Generic[T] pattern in core/cache.py and core/output.py — PEP 695 class Foo[T] is 3.12+.

Verification

After cleanup, each repo's CI should be green with reduced matrix (3.10+). Cross-repo smoke: pip install policyengine[us] and pip install policyengine[uk] succeed on 3.10 in a fresh venv.

主要语言
Python
星标
8
派生
10
平均合并
16 小时 3 分钟
30 天内合并 PR
17

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

PolicyEngine/policyengine.py 的其他 Issue

查看 PolicyEngine/policyengine.py 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。