模块'pip'没有属性'pep425tags'。

22

在我尝试使用 pip 安装 .whl 文件时

它提示如下:

... is not a supported wheel on this platform
为了解决这个问题,我在互联网上搜索,并发现我可以将它输入repl。

为了解决这个问题,我在互联网上搜索,并发现我可以将它输入repl。

import pip; print(pip.pep425tags.get_supported())

使用此命令,我可以看到pip支持的标签和版本。

然而,当我输入这段代码时,它显示:

AttributeError: module 'pip' has no attribute 'pep425tags'

有什么问题吗?

(在Python 3.6上使用pip 10.0.1)


我投票关闭此问题,因为该问题已过时,并且涉及的Python版本已经远远超出了EOL。 - not2qubit
11个回答

30

打印当前版本的pip与兼容标签列表:

$ path/to/pythonX.Y -m pip debug --verbose

pip debug子命令自v19.2(2019年7月)起可用。


要从Python代码中获取兼容标签列表,建议使用packaging及其packaging.tags.sys_tags()函数

import packaging.tags

tags = packaging.tags.sys_tags()

print('\n'.join([f'{tag.interpreter}-{tag.abi}-{tag.platform}' for tag in tags]))

8

对我来说,这个方法在使用Python 2.7(在虚拟环境中)时有效:

import wheel.pep425tags

print(wheel.pep425tags.get_supported())

1
这已经在2020年4月之后消失了(https://github.com/pypa/wheel/commit/a51977075740fda01b2c0e983a79bfe753567219),并且在wheel的README中明确说明没有稳定的API。 - wim

7

如果使用pip v10,请使用以下命令:

import pip._internal; print(pip._internal.pep425tags.get_supported())

1
不应使用 pip._internal - wim

3

使用Python 3.6.8和pip 19.1.1

python -c "import wheel.pep425tags as w print(w.get_supported())"

运行成功!

输出结果:

[('cp36', 'cp36m', 'win_amd64'), ('cp36', 'none', 'win_amd64'), ('cp36', 'none', 'any'), ('cp3', 'none', 'any'), ('cp35', 'none', 'any'), ('cp34', 'none', 'any'), ('cp33', 'none', 'any'), ('cp32', 'none', 'any'), ('cp31', 'none', 'any'), ('cp30', 'none', 'any'), ('py3', 'none', 'win_amd64'), ('py36', 'none', 'any'), ('py3', 'none', 'any'), ('py35', 'none', 'any'), ('py34', 'none', 'any'), ('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), ('py30', 'none', 'any')]

你需要发送一个必需的位置参数"archive_root"。所以打印(w.get_supported(archive_root=""))。 - shreesh katti
1
这已经在2020年4月之后消失了(https://github.com/pypa/wheel/commit/a51977075740fda01b2c0e983a79bfe753567219),并且在wheel的README中明确说明没有稳定的API。 - wim

2
主要问题在于pep425tagswheel模块的一个内部功能。我认为它从来没有被设计成这样使用,而且它总是会发生变化。我刚刚遇到了这个问题,注意到wheel==0.34.1pep425tags,而wheel==0.35.0没有。
所以,如果你真的想使用这个模块,请确保安装wheel==0.34.1

-1
作为警告,pip._internal不是一个稳定的API,所以您不会想要依赖它。但是如果它对您有帮助(就像对我一样),这个答案提供了解决问题的方法:
自pip版本19.3以来,TargetPython.get_tags()返回支持的PEP 425标签,以检查轮候选项(源)的标签按首选顺序返回(最优先)。
from pip._internal.models.target_python import TargetPython
target_python = TargetPython()
pep425tags = target_python.get_tags()

TargetPython类封装了针对软件包安装、下载等操作所针对的Python解释器的属性。


从 https://dev59.com/m1oU5IYBdhLWcg3wIkaI#68450405 复制,因为该解决方案似乎已经丢失。如果有人通过搜索到达这里,请注意。 - s_pike

-1

如果您有一个新版本的pip,并且只想获取get_supported函数调用的结果,请尝试这个:

python -c "from pip._internal.utils.compatibility_tags import get_supported; print(get_supported())"

# output:
[<cp310-cp310-win_amd64 @ 2517399109376>, <cp310-abi3-win_amd64 @ 2517399104384>, <cp310-none-win_amd64 @ 2517399161408>, <cp39-abi3-win_amd64 @ 2517399103040>, <cp38-abi3-win_amd64 @ 2517399294208>, <cp37-abi3-win_amd64 @ 2517399294464>, <cp36-abi3-win_amd64 @ 2517399294720>, <cp35-abi3-win_amd64 @ 2517399294976>, <cp34-abi3-win_amd64 @ 2517399295232>, <cp33-abi3-win_amd64 @ 2517399295488>, <cp32-abi3-win_amd64 @ 2517399104000>, <py310-none-win_amd64 @ 2517399296320>, <py3-none-win_amd64 @ 2517398433664>, <py39-none-win_amd64 @ 2517399296512>, <py38-none-win_amd64 @ 2517399296704>, <py37-none-win_amd64 @ 2517399296960>, <py36-none-win_amd64 @ 2517399297216>, <py35-none-win_amd64 @ 2517399297472>, <py34-none-win_amd64 @ 2517399297728>, <py33-none-win_amd64 @ 2517399297984>, <py32-none-win_amd64 @ 2517399298240>, <py31-none-win_amd64 @ 2517399298496>, <py30-none-win_amd64 @ 2517399298752>, <cp310-none-any @ 2517399299264>, <py310-none-any @ 2517399299008>, <py3-none-any @ 2517399299520>, <py39-none-any @ 2517399299840>, <py38-none-any @ 2517399300032>, <py37-none-any @ 2517399300288>, <py36-none-any @ 2517399300544>, <py35-none-any @ 2517399300800>, <py34-none-any @ 2517399301056>, <py33-none-any @ 2517399301312>, <py32-none-any @ 2517399301568>, <py31-none-any @ 2517399301824>, <py30-none-any @ 2517399302080>]

2
不应使用pip._internal。 - wim
@wim 我猜在Python中关于“应该”有很多不同的意见,但由于它的开发一直在不断变化,人们只是使用有效的方法。你的评论并没有比这个答案更有用,因为你没有解释为什么当它有效时就不应该使用。 - not2qubit
@not2qubit 不应该使用它,因为正如前导下划线 _ 和名称本身所示,它是一个内部实现细节,而不是稳定的 API。-- 应该使用类似这样的东西:packaging.tags.sys_tags() 代替(这很可能是 pip 自己使用的库)。 - sinoroc

-2

此信息已过时

一行Bash命令,适用于Py2.7Py3.6,使用pip-18.1

python3 -c "import wheel.pep425tags as w; print(w.get_supported())" |sed -zE 's/\),/),\n/g'

2
这已经在2020年4月之后消失了(https://github.com/pypa/wheel/commit/a51977075740fda01b2c0e983a79bfe753567219),并且在wheel的README中明确说明没有稳定的API。 - wim
没有必要对明确标记为过时的答案进行删除投票,因为其中的代码、链接和解释仍然可能有用。 - not2qubit
我不同意在已有的答案周围添加一点sed是一个有用的贡献。如果有什么问题,它可以作为那个答案的编辑。无论如何,Python 2.7和3.6现在都已经到了生命周期结束的阶段。 - wim

-2

我在我的GNU-Linux机器上有几个版本的Python,这给我带来了一些问题。 Python 2.7、3.4、3.6等等。

太乱了!我知道。:)

每次我使用python3并运行此代码:

import wheel.pep425tags
print(wheel.pep425tags.get_supported())

就像你一样,我也遇到了这个错误:

AttributeError: 'module' object has no attribute 'pep425tags'

通过浏览 stackoverflow,我注意到以下一些问题可能会对您有所帮助:

了解您的pip或pip3设置为哪个版本的Python很重要: 我的pip设置为python 2.7,而pip3也设置为python 3.6。

首先,检查您的pip或pip3的版本:

pip -V

或者

pip3 -V

由于我使用pip3,因此结果如下:

pip 20.0.2 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

这表明我的pip3使用python3.6,这使我直接进入了python3.6控制台。在这种情况下它可以工作并产生以下结果:

[('cp36', 'cp36m', 'linux_x86_64'), ('cp36', 'abi3', 'linux_x86_64'), ('cp36', 'none', 'linux_x86_64'), ('cp35', 'abi3', 'linux_x86_64'), ('cp34', 'abi3', 'linux_x86_64'), ('cp36', 'none', 'any'), ('cp3', 'none', 'any'), ('cp35', 'none', 'any'), ('cp34', 'none', 'any'), ('cp33', 'none', 'any'), ...]

希望这些步骤对你有用。


-2

AMD64

import pip._internal;print(pip._internal.pep425tags.get_supported())

WIN32

import pip;print(pip.pep425tags.get_supported())

然后通过相应平台的wheel文件(https://www.lfd.uci.edu/~gohlke/pythonlibs/)来安装pip install <.whl>


1
不应使用pip._internal。 - wim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接