Skip to content

Python 3.13 / 3.14 をサポートし、3.10 サポートを終了する - #13

Merged
ciela merged 4 commits into
mainfrom
claude/python-3-13-3-14-support-6319a7
Aug 26, 2026
Merged

Python 3.13 / 3.14 をサポートし、3.10 サポートを終了する#13
ciela merged 4 commits into
mainfrom
claude/python-3-13-3-14-support-6319a7

Conversation

@ciela

@ciela ciela commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

概要

サポート対象の Python を 3.11〜3.14 に変更します(requires-python = ">=3.11,<3.15")。

3.13 / 3.14 対応には cp314 ホイールを持つ依存への一斉更新が必要で、numpy は 2.3 以降 Python 3.10 をサポートしないため、EOL(2026-10)直前の 3.10 サポートを終了します。

主な変更

依存の更新(すべて == 固定のまま)

パッケージ 変更 備考
numpy 1.26.4 → 2.4.6 2.5 系は 3.12+ 専用のため、3.11 対応かつ cp314 のある 2.4 系
pandas 2.2.3 → 2.3.3 cp314 のある 2.x 最終系(3.x は破壊的変更が大きいため見送り)
pandera 0.20.3 → 0.32.1 pandera.pandas 名前空間へ移行
ortools 9.8.3296 → 9.15.6755 cp314 対応の最初のバージョン
protobuf(推移的) 7.34.0 → 6.33.6 ortools 9.15 の制約によるダウングレード
tomli 削除 3.11+ は stdlib の tomllib で足りる

ortools 9.15 のライセンス再審査

9.15 の Windows wheel は ortools/.libs/ に共有 DLL を置く構成で、同梱物が大きく変わります。apps/licenses/README.md の手順どおり上流 CMake マニフェストと wheel 実バイナリのシンボルで裏取りし、以下を更新しました。

  • BUNDLED_NATIVE_COMPONENTS: HiGHS (MIT) / SCIP v10 (Apache-2.0) / SoPlex (Apache-2.0) / Boost (BSL-1.0) / bzip2 / utf8_range (MIT) / pybind11_abseil を追加。Coin-OR 5 件・abseil・protobuf・re2・zlib・pybind11 はタグとパッチを更新
  • GLPK(GPL)が未リンクであること、Eigen の LGPL 対象 2 ファイルが含まれないことをシンボルで再確認
  • ortools 9.15 は wheel に LICENSE を同梱するため NO_LICENSE_TEXT_PACKAGES を空に
  • licenses/native/ の上流条文を再収集、licenses/spdx/ に BSL-1.0 と bzip2-1.0.6 を追加
  • numpy 2.x の宣言に合わせて PERMISSIVE_LICENSES に 0BSD と CC0-1.0 を追加

凍結ビルドの修正

  • apps/pyinstaller_hooks/hook-ortools.py を追加: ortools は <pkg>/.libs/ の DLL を実行時にプリロードしますが(見つからない場合は黙ってスキップ)、PyInstaller が収集しないため凍結 exe が DLL load failed で起動不能になります。collect_dynamic_libs でパッケージ相対配置のまま収集します
  • distribution_license_files() を階層保存に変更: numpy 2.4 は dist-info 内に同名ライセンス(LICENSE.md ×9 など)を入れ子ディレクトリで同梱し、ファイル名への平坦化では上書き衝突するため

CI・ドキュメント

  • pytest / pytest_win の matrix を 3.11〜3.14 に変更(カバレッジ集計 3.12、PyInstaller 凍結バイナリ 3.11 は据え置き)、lint の ruff ジョブを 3.11 に
  • README / docs / CONTRIBUTING のバッジと「Python 3.10〜3.12」表記を更新

検証

  • 3.11 / 3.12 / 3.13 / 3.14 の各バージョンで uv sync(全 extra)と全テスト 522 件パス
  • ブラウザテスト 18 件、binary テスト(凍結 exe 実機)パス
  • ruff check / ruff format --check / mkdocs build --strict パス
  • lint.yml の licenses ジョブ相当の全 verify 関数と、実ビルドに対する check_bundled_notices.py をローカルで通過

レビュー時の留意点

  • CP-SAT のマッチング結果は ortools 9.8 → 9.15 で期待値の変更なし(全テストパス)
  • 3.10 打ち切りは利用者への breaking change のため、リリース時はバージョンを 0.2.0 に上げ、リリースノートに明記することを推奨します(本 PR ではバージョンは触っていません)

🤖 Generated with Claude Code

requires-python を >=3.11,<3.15 に広げ、cp314 ホイールの無い依存を
一斉に更新する(numpy 2.4.6 / pandas 2.3.3 / pandera 0.32.1 /
ortools 9.15.6755)。numpy 2.3 以降が Python 3.10 を切っているため、
EOL(2026-10)直前の 3.10 は打ち切る。

- ortools 9.15 の Windows wheel は ortools/.libs/ に共有 DLL を置く
  構成のため、同梱物(HiGHS / SCIP / SoPlex / Boost / bzip2 /
  utf8_range が追加)を再審査し、BUNDLED_NATIVE_COMPONENTS と
  ライセンス通知を更新。凍結ビルドで .libs が収集されるよう
  hook-ortools.py を追加
- numpy 2.4 は dist-info 内に同名ライセンスを入れ子で同梱するため、
  distribution_license_files() を階層保存に変更
- pandera は pandera.pandas 名前空間へ移行、tomli フォールバックを撤去
- CI matrix を 3.11〜3.14 に変更(カバレッジ集計 3.12、凍結バイナリ
  3.11 は据え置き)。バッジとドキュメントの表記も更新

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Coverage report

Click to see where and how coverage changed

FileStatementsMissingCoverageCoverage
(new stmts)
Lines missing
  apps
  version.py
Project Total  

This report was generated by python-coverage-comment-action

ciela and others added 3 commits August 25, 2026 16:36
ortools の拡張モジュールが import する ortools/.libs の共有 DLL は、
PyInstaller の依存解決では最終的に PATH の探索へフォールバックする。
GitHub Actions の Windows ランナーのように PATH 上へ同名の無関係な
DLL(abseil_dll.dll / libprotobuf.dll)を持つ環境では、そちらが解決されて
バージョン違いの DLL が _internal/ 直下に混入し、
verify_runtime_dlls_are_accounted_for が検出してビルドが止まっていた。

wheel 自身の .libs を PATH の先頭に足してから PyInstaller を起動し、
常に正しいコピーが解決されるようにする。解決先が site-packages 配下に
なるため配置も ortools/.libs のまま保たれ、hook-ortools.py の収集分と
重複しない。PATH に同名 DLL を置いた環境で失敗の再現と修正後の成功、
および binary テストの通過をローカルで確認済み。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
pyinstaller_build.yml は PR ごとに dist/ChilmAI を組み立てて検証まで
しているが、成果物は捨てていた。検証がすべて通った場合のみ
actions/upload-artifact でアップロードし、Actions の実行ページから
動作確認用にダウンロードできるようにする。数百 MB 級なので保持期間は
7 日にする。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
upload-artifact はドット始まりのパスを隠しファイルとして既定で除外する
(include-hidden-files: false)。ortools 9.15 の共有 DLL 置き場
ortools/.libs がこれに該当して丸ごと欠落し、Artifact からダウンロード
した exe が DLL load failed で起動しなかった(CI の binary テストは
アップロード前のローカル成果物に対して走るため検出できない)。

リリース ZIP は release_tag.yml の Compress-Archive で作られる別経路で、
こちらは Windows の Hidden 属性ベースの判定のため .libs を含むことを
確認済み。影響は PR 段階の Artifact のみ。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ciela
ciela marked this pull request as ready for review August 26, 2026 05:28
@ciela
ciela requested a review from ryaukwan August 26, 2026 05:28

@ryaukwan ryaukwan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@ciela
ciela merged commit 27dbc5c into main Aug 26, 2026
11 checks passed
@ciela
ciela deleted the claude/python-3-13-3-14-support-6319a7 branch August 26, 2026 06:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants