古いバージョンのPython へのサポートをやめる¶
古いバージョンのPythonへのサポートを取りやめる能力については、標準的な コアとなるメタデータの仕様 1.2 仕様の Requires-Python アトリビュートで有効化されています。
Pip のような Metadata 1.2+ のインストーラは、動作中の Python ランタイムのバージョンとパッケージのメタデータで要求されているバージョンを比較突合することで、この仕様を遵守しようとします。もし両者が一致しなければ、その Python ランタイムでサポートされているパッケージ配布物の中で最新のものをインストールしようと試みます。
パッケージのメタデータにある Requires-Python 属性を修正することで、古いバージョンの Python へのサポートを削除するのにこのメカニズムを利用することができます。
要求事項¶
このワークフローは、パッケージをインストールしようとするユーザが Pip [1] か、または、Metadata 1.2 の仕様を満足する別のインストーラを使うことを要求します。
universal wheelsの取り扱い¶
伝統的には、Python 2 と Python 3 の両方に文法的な互換性のある Python ソースコードを提供する Setuptools プロジェクトは、 py2.py3 というタグをその名前の中に持つ wheels を生成します。 Python 2 へのサポートをやめる時には、このタグをただの py3 に変更するのを忘れないことが重要です。これは、しばしば、 setup.cfg の中の [bdist_wheel] セクションで universal=1 として設定されています。
このメソッドを使うのであれば、このオプションないしセクションを削除するか、または、明示的に universal を 0 に設定してください。
# setup.cfg
[bdist_wheel]
universal = 0 # Make the generated wheels have "py3" tag
ヒント
setup.py から直接に呼び出すことは 非推奨 になっていて、コマンドラインで --universal フラグを渡すことでこの設定を上書きできるでしょう。
要求する Python のバージョンを定義する¶
1. twine のインストール¶
twine の最新版が利用可能であることを確実にしておきましょう。やり方は:
python3 -m pip install --upgrade twine
py -m pip install --upgrade twine
2. サポートする Python 配布物のバージョンの範囲を指定する¶
プロジェクトがどのバージョンの Python 配布物をサポートしているかを宣言するバージョンレンジ <version range> を pyproject.toml 内に設定しましょう。 requires-python 設定フィールドは、 Requires-Python コアメタデータに対応しています:
[build-system]
...
[project]
requires-python = ">= 3.8" # At least Python 3.8
「少なくとも Python 3.9」のような、バージョンの範囲や除外のルール (で バージョン指定子 仕様に合致するもの) を指定することができます。あるいは、「少なくとも Python 3.7 かそれ以上、しかし、 3.7.0 と 3.7.1 のポイントリリースを除く」:
requires-python = ">= 3.9"
requires-python = ">= 3.7, != 3.7.0, != 3.7.1"
Setuptools ビルドバックエンドを使っているなら、もっと詳しいことは dependency-management 説明文書に当たってみてください。
注意
例えば ">=3.8, < 3.10" のようにバージョン範囲に上限を加えることを避けましょう。そうすることで別のエラーやバージョンコンフリクトを引き起こすかもしれません。もっと詳しくは、 discourse-discussion を見てください。
3. 公開の前にメタデータを検証する¶
Python のソースコードパッケージ (あなたがダウンロードしたzipファイルやtar.gzファイル) の中には、PKG-INFO という名前のテキストファイルがあります。
このファイルは、ソースコードパッケージを生成するときに、 ビルドバックエンド によって生成されます。このファイルには、一連のキーと値を含んでいて、キーのリストは PyPA 標準メタデータフォーマットの一部です。
生成されたファイルの内容はこのようになっています:
tar xfO dist/my-package-1.0.0.tar.gz my-package-1.0.0/PKG-INFO
パッケージを公開する前に、以下のことが適切かどうかを検証してください。
アップグレードが正しく終われば、
Metadata-Versionの値が 1.2 かそれ以上になっているはずです。Requires-Pythonフィールドが設定されていて、設定ファイルで指定したものに一致しているはずです。
4. パッケージを公開する¶
プロジェクトを PyPI にアップロードする で示唆されたように進めましょう。
Python のバージョンをサポートから外す¶
人々がまだ依存しているバージョンが一旦ドロップされればダウングレードせざるを得なくなるので、原則として、 Python のバージョンに対するメタデータのサポートは可能な限り長く保たれるべきです。しかしながら、特定のバージョンをサポートすることが、新しい機能の阻害要因になるとか、他の問題が起きるとかする場合は、メタデータの Requires-Python は修正されるべきです。もちろん、これは、プロジェクトが安定的で広範囲のユーザをよくカバーするか否かにも依存します。
バージョン互換性の変更は、それぞれ、それ自身のリリースを持つべきです。