DAD*_*590 5 python python-wheel
在尝试安装之前,是否可以以编程方式检查轮子 (whl) 是否与所选的 Python 安装兼容?
我正在制作一个自动包安装程序(我的Python项目工作所需的包),我只需要尝试安装兼容的pkg,所以如果出现错误,我知道它们仅来自兼容的模块,我应该看看是什么发生了(也不是来自不兼容的 pkg 的错误,我不在乎)。示例:我有 Python 3.5 和 3.7 的轮子,在 3.5 安装中,无法尝试安装 3.7 轮子。
我已经尝试过pkginfo(https://pypi.org/project/pkginfo/),但是在 上wheel.supported_platforms,它返回一个空数组,我无法对此做任何事情(带有“any”或“win32”的轮子平台部分中的名称,返回一个空数组,所以我似乎无法使用它)。
还尝试了 的输出python -m pip debug --verbose,但出现以下内容:
WARNING: This command is only meant for debugging. Do not use this with automation for parsing and getting these details, since the output and options of this command may change without no
tice.
Run Code Online (Sandbox Code Playgroud)
这使得该命令无法使用,即使它打印了“兼容标签”,我或多或少可以使用它来确定轮子是否受其名称支持。Python 数组中的“兼容标签”示例:
['cp39-cp39-win_amd64', 'cp39-abi3-win_amd64', 'cp39-none-win_amd64', 'cp38-abi3-win_amd64', 'cp37-abi3-win_amd64', 'cp36-abi3-win_amd64', 'cp35-abi3-win_amd64', 'cp34-abi3-win_amd64', 'cp
33-abi3-win_amd64', 'cp32-abi3-win_amd64', 'py39-none-win_amd64', 'py3-none-win_amd64', 'py38-none-win_amd64', 'py37-none-win_amd64', 'py36-none-win_amd64', 'py35-none-win_amd64', 'py34-no
ne-win_amd64', 'py33-none-win_amd64', 'py32-none-win_amd64', 'py31-none-win_amd64', 'py30-none-win_amd64', 'cp39-none-any', 'py39-none-any', 'py3-none-any', 'py38-none-any', 'py37-none-any
', 'py36-none-any', 'py35-none-any', 'py34-none-any', 'py33-none-any', 'py32-none-any', 'py31-none-any', 'py30-none-any']
Run Code Online (Sandbox Code Playgroud)
例如,使用“pyHook-1.5.1-cp36-cp36m-win32.whl”,我可以检查名称并查看它是否兼容(除了上面的警告......)。
还有其他想法吗?
预先感谢您的任何帮助!
编辑:我可以手动从名称中提取内容,并对我在文档中看到的一些可能性进行硬编码,例如“win32”和“win_amd64”(就像我之前所做的那样),但随后我需要确切地知道所有名称的各个部分可以具有的可能性(我在文档中看到了一个很酷的表达:“eg” - 这意味着还有比提到的更多的东西)并且在这方面有很多工作。我希望已经有人做出了这样的事情(也许 Python 本身在其任何内部包中都有某种方式)。
您可以使用包装来做到这一点。
pip install packaging
Run Code Online (Sandbox Code Playgroud)
获取标签的示例代码类似于从 pip 获取标签的方式:
from packaging.tags import sys_tags
tags = sys_tags()
print([str(tag) for tag in tags])
# ['cp39-cp39-manylinux_2_33_x86_64', 'cp39-cp39-manylinux_2_32_x86_64', 'cp39-cp39-manylinux_2_31_x86_64', ..... , 'py31-none-any', 'py30-none-any']
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用上述变量以编程方式执行更多操作tags:
>>> tags = sys_tags()
>>> for tag in list(tags)[:3]:
... print(tag.interpreter, tag.abi, tag.platform)
...
cp39 cp39 manylinux_2_33_x86_64
cp39 cp39 manylinux_2_32_x86_64
cp39 cp39 manylinux_2_31_x86_64
Run Code Online (Sandbox Code Playgroud)
有关更深入的文档,请检查: https: //packaging.pypa.io/en/latest/tags.html#packaging.tags.sys_tags
| 归档时间: |
|
| 查看次数: |
2420 次 |
| 最近记录: |