簡體   English   中英

從 `pyproject.toml` 生成 Python 解釋器不容忍的輪子

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM