以编程方式检查控制盘是否与Python安装兼容

2024-09-29 22:04:18 发布

您现在位置:Python中文网/ 问答频道 /正文

在尝试安装之前,是否可以通过编程方式检查控制盘(whl)是否与所选Python安装兼容

我正在制作一个自动化的软件包安装程序(Python项目工作所需的软件包),我只需要尝试安装兼容的PKG,因此如果有错误,我知道它们只来自兼容的模块,我应该看到发生了什么(而不是来自不兼容的PKG的错误,我不在乎)。示例:我有Python3.5和3.7的控制盘,在3.5安装中,无法尝试安装3.7控制盘

我尝试过pkginfohttps://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.

这使得命令无法使用,即使它打印了“兼容标签”,我或多或少可以用它来确定一个轮子是否受其名称的支持。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']

例如,使用“pyHook-1.5.1-cp36-cp36m-win32.whl”,我可以检查名称,看看它是否兼容(除了上面的警告…)

还有其他想法吗

提前感谢您的帮助

编辑:我可以手动从名称中提取一些内容,并对文档中看到的一些可能性进行硬编码,如“win32”和“win_amd64”(就像我以前做的那样),但接下来我需要确切地知道名称部分可能具有的所有可能性(我在文档中看到了一个很酷的表达:“e.g.”-这意味着有不止提到的事情)并且在这方面有很多工作。我希望已经有人制作了这样的东西(甚至Python本身在任何内部包中都有一些方法)


Tags: 名称none示例错误anypkg数组win
1条回答
网友
1楼 · 发布于 2024-09-29 22:04:18

可以使用packaging执行此操作

pip install packaging

获取标签的示例代码与从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']

当然,您可以使用上面的变量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

有关更深入的文档,请选中:https://packaging.pypa.io/en/latest/tags.html#packaging.tags.sys_tags

相关问题 更多 >

    热门问题