古いバージョンのPython へのサポートをやめる#
古いバージョンのPythonへのサポート取りやめは、標準的な コアとなるメタデータの仕様 1.2 仕様の "Requires-Python" アトリビュートでサポートされています。
Pip 9.0+ のような Metadata 1.2+ のクライアントは、動作中の Python ランタイムのバージョンとパッケージのメタデータで要求されているバージョンを比較突合することで、この仕様を遵守しようとします。もし両者が一致しなければ、その Python ランタイムでサポートされているパッケージ配布物の中で最新のものをインストールしようと試みます。
パッケージのメタデータにある "Requires-Python" 属性を修正することで、古いバージョンの Python へのサポートを削除するのにこのメカニズムを利用することができます。
このガイドは特に Setuptools のユーザに向けて書かれていますので、同様の機能を提供する flit
のような他のパッケージングツールのユーザは適切な文書を参照する必要があるでしょう。
要求事項#
このワークフローは、以下を要求します:
(パッケージを)公開しようとするものが最新版の Setuptools を使っていて、
最新版の twine を使ってパッケージのアップロードを行い、
パッケージをインストールしようとするユーザが、少なくとも Pip 9.0 か、または、Metadata 1.2 の仕様を満足するクライアントを使っていること。
universal wheelsの取り扱い#
伝統的には、Python 2 と Python 3 の両方で文法的に互換性のある Python ソースコードを提供するプロジェクトは、 py2.py3
というタグをその名前の中に持つ wheels を生成しています。 Python 2 へのサポートをやめる時には、このタグをただの py3
に変更するのを忘れないことが重要です。 setuptools を使っているのであれば、 setup.cfg
の中の [bdist_wheel]
セクションで universal=1
として設定されています。
このメソッドを使うのであれば、このオプションないしセクションを削除するか、または、明示的に universal
を 0
に設定してください。
# setup.cfg
[bdist_wheel]
universal = 0 # Make the generated wheels have "py3" tag
Tip
CLIでオプションを指定することで setup.cfg
ファイルでの設定を上書きすることができるので、あなたのパッケージ生成スクリプトが --universal
オプションを指定していないことを確実にしてください。
要求する Python のバージョンを定義する#
1. Setuptools の最新版をダウンロードする#
ソースコード配布物を生成するにせよ、バイナリ配布物を生成するにせよ、 Setuptools を更新し twine をインストールするようにしてください。
手順:
python3 -m pip install --upgrade setuptools twine
py -m pip install --upgrade setuptools twine
setuptools
のバージョンが 24.0.0 以上であること。
2. サポートする Python 配布物のバージョンの範囲を指定する#
「少なくとも Python 3」や「Python 2.7 か Python 3.5 とそれ以上」などというように、バージョンの範囲や除外のルールを指定することができます。
例:
Requires-Python: ">=3"
Requires-Python: ">2.7,!=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
このような値の設定は、 setup.py
スクリプトの中の setup
の呼び出しの中で行えます。 python_requires
引数に設定した内容に基づいて Requires-Python
メタデータの値が挿入されます。
from setuptools import setup
setup(
# Your setup arguments
python_requires='>=2.7', # Your supported Python ranges
)
3. 公開の前にメタデータを検証する#
Python のソースコードパッケージ (あなたがダウンロードしたzipファイルやtar.gzファイル) の中には、PKG-INFO という名前のテキストファイルがあります。
このファイルは distutils や Setuptools でソースコードパッケージを作成する時に一緒に作成されます。その内容は、一連のキーと値の組み合わせで、キーは Pypa 標準メタデータフォーマットの一部です。
生成されたファイルの内容はこのようになっています:
tar xfO dist/my-package-1.0.0.tar.gz my-package-1.0.0/PKG-INFO
パッケージを公開する前に、以下のことが適切かどうかを検証してください。
アップグレードが正しく終われば、Metadata-Version の値が 1.2 かそれ以上になっているはずです。
Requires-Python フィールドが設定されていて、setup.py でのあなたの指定に一致しているはずです。
4. Twineを使って公開する#
動作が速いことを別にしてもTwineには数多くの利点があり、今ではパッケージを公開するためのメソッドとしてサポートされています。
少なくとも1.9以上の最新のTwineを使うようにしてください。
Pythonリリースをサポートから外す#
Requires-Python メタデータ付きでパッケージを公開しさえすれば、次回以降の更新の際にPython ランタイムをサポートから外すことができるようになります。
自動フォールバックが正しく動作するためには、この順番で行わなければなりません。
例えば、 Requires-Python: ">=2.7" の状態であなたのパッケージのバージョン 1.0.0 を公開したとしましよう。
その後、バージョン文字列を ">=3.5" に修正した新しいバージョン 2.0.0 のパッケージを公開すれば、Pip 9.0+ を 2.7 で使っているユーザはバージョン 1.0.0. のパッケージをインストールし、>=3.5 のユーザはバージョン 2.0.0 を受け取ることになるでしょう。