メモの日々


2024年09月27日(金) [長年日記]

[python] 作成するWheelファイルのファイル名

昨日の例で作られるWheelファイルのファイル名は

  • oreore-0.1.0-py3-none-any.whl

になる。これの「py3-none-any」の部分はPlatform compatibility tagsと呼ばれ、

  • python tag
  • abi tag
  • platform tag

を並べたものになっている。

Wheelが特定のPythonバージョンや特定のプラットフォームを要求する場合、これらのタグを適切に指定する必要があるが、作成するファイル名を制御するにはどうすればいいのか?

方法1: buildの--config--settingオプションを使用する

昨日の例ではWheelの作成にpipを使用したが、pipでファイル名を制御する方法はわからなかった。buildを使えばある程度制御できて、昨日の環境で次のコマンド

$ python -m build . --wheel \
  --config-setting="--build-option=--python-tag hello --plat-name world"

を実行すると

  • oreore-0.1.0-hello-none-world.whl

というファイル名のWheelが作られる。

abi tagを指定する方法は分からなかった。また、確認したビルドバックエンドはSetuptoolsだけで、別のバックエンドを使う場合は別の指定方法になると思われる。

方法2: wheel tagsコマンドでファイル名を変更する

wheelというパッケージがあり、これをインストールするとwheel tagsというコマンドを使えるようになって、これでWheelのファイル名の変更が簡単にできる。

$ python -m wheel tags oreore-0.1.0-py3-none-any.whl \
  --python-tag=hello --platform-tag=world --abi-tag=abc

上のコマンドを実行すると次のファイル名のWheelが作られる。abi tagも指定できる。

  • oreore-0.1.0-hello-abc-world.whl

適切なタグ名を取得する

各タグの名前を取得するのには、packagingというパッケージが使える。

例えば、動作しているPython環境に一番適合したタグ名は packaging.tags.sys_tags() により取得できる。

>>> import packaging.tags
>>> print(next(packaging.tags.sys_tags()))
cp312-cp312-manylinux_2_35_x86_64
>>>