[英]Generating Python interpreter-intolerant wheels from a `pyproject.toml`
考慮以下pyproject.toml
:
[build-system]
requires = ["setuptools>=40.8.0", "wheel"]
[project]
name = "foo"
version = "0.0.0"
requires-python = "~=3.9"
如果我運行pip wheel.
在包含此文件的目錄中,然后我生成一個名為foo-0.0.0-py3-none-any.whl
。 然而,這個 wheel 文件名表明任何 python3 解釋器都可以,但是我的pyproject.toml
中的requires-python
元數據表明只有 python3.9 是可以接受的。
如何讓requires-python
元數據反映在輪子中? 在這種情況下,我希望 wheel 文件名是foo-0.0.0-cp39-cp39-any.whl
。 . .
這不完全是 wheel 文件名中的平台標簽的用途 - cp39 表示您只與CPython 3.9 或更高版本兼容,並且 PyPy 或其他一些實現不應選擇此 wheel。 如果您在 wheel 中有一些特定於 CPython 的已編譯 C 擴展,您通常只會使用這樣的兼容性標簽。
Requires-Python元數據仍然位於您構建的 wheel 中,如果您嘗試將它安裝在不兼容的 Python 版本上,您將看到它:
$ python3.8 -m pip install ./foo-0.0.0-py3-none-any.whl
Processing ./foo-0.0.0-py3-none-any.whl
ERROR: Package 'foo' requires a different Python: 3.8.13 not in '~=3.9'
元數據的位置在這里:
$ unzip foo-0.0.0-py3-none-any.whl
Archive: foo-0.0.0-py3-none-any.whl
inflating: foo-0.0.0.dist-info/METADATA
inflating: foo-0.0.0.dist-info/WHEEL
inflating: foo-0.0.0.dist-info/top_level.txt
inflating: foo-0.0.0.dist-info/RECORD
$ grep Requires foo-0.0.0.dist-info/METADATA
Requires-Python: ~=3.9
至於這如何與 PyPI 一起工作——索引可能會在json API (示例)和簡單的 API (示例) †中返回此元數據。 這允許 pip 避免下載和解壓不兼容的輪子。
†它位於 href 的data-requires-python
屬性中——您可能必須在瀏覽器中“查看源代碼”才能看到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.