PyQt5 5.15.0中出现AttributeError: module 'sipbuild.api'没有属性'prepare_metadata_for_build_wheel'。

67

我试图安装一个程序,它需要安装PyQt5 5.15.0版本,但是出现了这个错误。奇怪的是最新版的PyQt5(5.15.2)可以正常安装,但该程序专门需要5.15.0版本。

命令输出:

Collecting PyQt5==5.15.0
  Using cached PyQt5-5.15.0.tar.gz (3.3 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... error
    ERROR: Command errored out with exit status 1:
     command: 'c:\users\mshal\appdata\local\programs\python\python39\python.exe' 'C:\Users\mshal\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\mshal\AppData\Local\Temp\tmp41s11ev6'
         cwd: C:\Users\mshal\AppData\Local\Temp\pip-install-sfw90hvc\pyqt5_e2cc46859b554da7b84798abae5378ba
    Complete output (31 lines):
    Traceback (most recent call last):
      File "C:\Users\mshal\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py", line 126, in prepare_metadata_for_build_wheel
        hook = backend.prepare_metadata_for_build_wheel
    AttributeError: module 'sipbuild.api' has no attribute 'prepare_metadata_for_build_wheel'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "C:\Users\mshal\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py", line 280, in <module>
        main()
      File "C:\Users\mshal\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py", line 263, in main
        json_out['return_val'] = hook(**hook_input['kwargs'])
      File "C:\Users\mshal\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py", line 130, in prepare_metadata_for_build_wheel
        return _get_wheel_metadata_from_wheel(backend, metadata_directory,
      File "C:\Users\mshal\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py", line 159, in _get_wheel_metadata_from_wheel
        whl_basename = backend.build_wheel(metadata_directory, config_settings)
      File "C:\Users\mshal\AppData\Local\Temp\pip-build-env-nnx_yu09\overlay\Lib\site-packages\sipbuild\api.py", line 51, in build_wheel
        project = AbstractProject.bootstrap('pep517')
      File "C:\Users\mshal\AppData\Local\Temp\pip-build-env-nnx_yu09\overlay\Lib\site-packages\sipbuild\abstract_project.py", line 83, in bootstrap
        project.setup(pyproject, tool, tool_description)
      File "C:\Users\mshal\AppData\Local\Temp\pip-build-env-nnx_yu09\overlay\Lib\site-packages\sipbuild\project.py", line 479, in setup
        self.apply_user_defaults(tool)
      File "project.py", line 62, in apply_user_defaults
        super().apply_user_defaults(tool)
      File "C:\Users\mshal\AppData\Local\Temp\pip-build-env-nnx_yu09\overlay\Lib\site-packages\pyqtbuild\project.py", line 79, in apply_user_defaults
        super().apply_user_defaults(tool)
      File "C:\Users\mshal\AppData\Local\Temp\pip-build-env-nnx_yu09\overlay\Lib\site-packages\sipbuild\project.py", line 225, in apply_user_defaults
        self.builder.apply_user_defaults(tool)
      File "C:\Users\mshal\AppData\Local\Temp\pip-build-env-nnx_yu09\overlay\Lib\site-packages\pyqtbuild\builder.py", line 66, in apply_user_defaults
        raise PyProjectOptionException('qmake',
    sipbuild.pyproject.PyProjectOptionException
    ----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\users\mshal\appdata\local\programs\python\python39\python.exe' 'C:\Users\mshal\AppData\Roaming\Python\Python39\site-packages\pip\_vendor\pep517\_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\mshal\AppData\Local\Temp\tmp41s11ev6' Check the logs for full command output.

我使用的是最新版本的pip。您对此问题的根本原因有任何想法吗?


7
首先尝试升级pip:sudo python3 -m pip install --upgrade pip,然后再安装pyqt5:sudo python3 -m pip install pyqt5 - eyllanesc
1
@eyllanesc,它说sudo不被识别为内部命令。我在Windows上,但我的pip已安装到最新版本,我刚刚检查过。 - thecrispywisp
2
我在树莓派(Linux)上遇到了与您相同的问题,但是所有答案都不起作用。无论下面给出的建议如何,错误消息仍然会显示。 - Vasco Cansado Carvalho
3
也许,先安装 pyqt-sip 可能会有帮助?可以使用命令 python3 -m pip install pyqt-sip 进行安装。 - APaul
1
这个主题已经在 https://dev59.com/EVEG5IYBdhLWcg3wct5F 得到了回答。 - Jari Turkia
14个回答

42

对我有帮助的是将pip从20.2.3升级到最新版本(在我的情况下是21.1.1)。


6
我尝试在Python 3.8.2和pip 19.2.3的虚拟环境中安装PyQt5。然后我运行了pip install --upgrade pip并升级到pip-21.1.2,之后我能够无问题地安装PyQt5。 - ChaserAide
为什么这个可以修复它?有人能讲讲这个故事吗?很多次升级pip都能解决问题。 - undefined
我想知道是否有一个更新版本的pip会更积极地寻找一个已发布到PyPI的预编译二进制轮子的兼容版本? - undefined

21

对于Mac/Homebrew用户。

@the-x的答案正朝着正确的方向引导。在使用Homebrew安装了QT5的Mac上,只需要将qmake二进制文件添加到路径中即可。可以通过以下方式实现:

export PATH="/opt/homebrew/opt/qt5/bin:$PATH"

(当然这取决于自制文件安装的位置)


2
这对我解决了问题。qt5路径可以通过brew --prefix qt找到。 - Chris
2
根据@Voljum的答案更具体问题的这个答案,您仍需要接受pyqt许可证,例如使用pip install pyqt5 --config-settings --confirm-license= --verbose进行安装。 - kontur

11
在 NVIDIA Xavier 上运行 Python3.6(Ubuntu18 版本),并且使用 ARM 架构。
sudo apt install qt5-default

1
如果主机上未安装QT5或版本差距太大,则此应为所选答案,元数据将不存在或无效。 - Mark Carpenter Jr

9

针对 MacOS 用户。

我使用的是 Apple M1 芯片和 Python 3.9.8。对我而言,@Apaul 在原问题部分中发表的评论是有效的。在安装 pyqt5 前,需要先安装 pyqt5-sip。

我还有一台 Intel Mac,在那台机器上,我不需要这样做。


1
我尝试安装pyqt5-sip,然后安装pyqt5,但是失败了,出现了错误信息。请注意:此错误来自子进程,可能与pip无关。错误信息为metadata-generation-failed。 - xin.chen
你使用的是 M1 芯片还是 Intel 芯片的 Mac 电脑? - ejkitchen
在搭载 M1 的 Mac 上 - xin.chen
25
尝试使用 pip install pyqt5-sip 修复问题在我的 M1 Mac 上没有任何改变。错误模块'sipbuild.api'没有属性'prepare_metadata_for_build_wheel'仍然存在。 - Jari Turkia
1
很遗憾,问题仍然存在。有什么办法可以解决吗?我正在尝试安装Spyder命令行。 - Korpel
嗨@Korpel,我刚刚发布了一个适用于苹果Mac的答案(示例使用pixellib库,但是通用的)。 - mPrinC

8

检查PyQt5在pypi上提供的二进制文件,针对版本5.15.0,我发现它未提供Windows下python3.9的二进制文件,因此pip会尝试使用源代码进行编译,这会比较复杂且可能会引发多个依赖问题(例如您必须安装Qt 5.15等)。因此,我建议安装更新版本的PyQt5,例如5.15.2,因为如果它提供了Windows下python3.9的二进制文件,并且是Qt的LTS版本的封装,则已经解决了几个错误。

python -m pip install PyQt5==5.15.2

另一种解决方法是使用Python 3.8而不是Python 3.9,这样就可以从PyPI安装pyqt5 5.15.0而不会出现问题。


很有道理!我已经安装了5.15.2版本,它运行得非常好,但是我正在尝试使用的程序似乎仍然在尝试下载5.15.0版本,即使我已经安装了5.15.2版本。那么这是否是该特定程序本身的问题呢? - thecrispywisp
@thecrispywisp 1)请阅读我的更新帖子,2)似乎某些依赖关系非常严格(除了愚蠢之外),因为Qt 5.15.0和Qt 5.15.2的代码库是相同的,只是Qt 5.15.2解决了Qt 5.15.0的几个错误。如果您告诉我是哪个程序(或存储库),那么我会尝试调查应该修改什么,以使其不再要求您使用该特定版本。 - eyllanesc
@thecrispywisp 你是如何安装RLBot的?另一方面,我认为最简单的方法是使用我的答案中的option2:卸载python3.9并使用python3.8,然后安装pyqt5 5.15.0。 - eyllanesc
有没有一种方法可以直接降级Python而不丢失我的库? - thecrispywisp
好的,非常感谢你对我的耐心!我可能会等待程序修复,因为重新下载我的库不值得麻烦。我非常感激你的时间! - thecrispywisp
显示剩余3条评论

7

综合多个回答,对于以下环境:在搭载macOS Ventura 13.0.1、Homebrew 3.6.17和Python 3.11.0的苹果M1 Pro Macbook上,使用以下命令即可解决问题(无需sudo):

brew install qt5
export PATH="/opt/homebrew/opt/qt5/bin:$PATH"
python3 -m ensurepip --default-pip
pip3 install pyqt5-sip
pip3 install pyqt5 --config-settings --confirm-license= --verbose

最后一步调用qmake在您的M1上编译全部Qt,需要几分钟时间,请耐心等待直到完成。


5

升级pip可以让您安装PyQt5。就我个人而言,当我安装PyQt6时遇到了同样的问题,我升级了我的pip,然后一切都完美地安装了。我认为Python和pip版本在安装PyQt时都发挥着重要作用,因此请确保您拥有更新的版本。

这是我在Linux中使用的命令:

pip install --upgrade pip

3
对于那些在安装Apple M1时遇到困难的人,这里提供一个可行的解决方案,特别是针对安装依赖于PyQt5pixellib库的问题,但同样适用于其他库:
  1. PyQt5不支持Apple M1,需要使用qt6: https://www.reddit.com/r/learnpython/comments/o4w1ut/comment/h2jele3/?utm_source=share&utm_medium=web2x&context=3https://www.qt.io/product/qt6
  2. 这意味着您需要安装PyQt6:python3 -m pip install PyQt6
  3. 进入您需要的库,例如pixellib: https://pypi.org/project/pixellib/#files 并且
  4. 下载wheel文件
  5. 获取wheel工具:pip install wheel
  6. 解压wheel wheel unpack pixellib-0.7.1-py3-none-any.whl
  7. 将其依赖项PyQt5更改为PyQt6
    1. 编辑pixellib-0.7.1/pixellib-0.7.1.dist-info/METADATA
    2. pyQt5 => pyQt6
  8. 重新打包 wheel pack pixellib-0.7.1
  9. 安装它:pip install pixellib-0.7.1-py3-none-any.whl
  10. 在Python中进行测试:`
# should work
import pixellib

附言:感谢TerraChaOS对本报告所涉及项目的支持。


这个假设是在你尝试安装的项目中,pyqt5和pyqt6是可以互换的,但实际上它们可能并不是互换的。 - kontur

2

由于 qt5-default 不可用,我安装了 qt5-default 的依赖项

sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools

之后我先通过apt-get安装了pyqt5,然后再通过pip进行安装。

sudo apt-get install pyqt5-dev
pip install pyqt5

现在轮子似乎可以使用了


附注:

  • 我不确定是否需要执行sudo apt-get install pyqt5-dev

这是正确的答案,我可以确认只需要第一个命令就足够了! - undefined

1

这里抛出的错误信息是误导性的 - 它不是关于 sipbuild.api 属性的问题。实际上,在这种情况下,程序缺少 qmake,请查看Python回溯中的最后一行。请检查它是否已安装在您的系统上,并将其添加到您的 PATH 变量中。否则,请安装它。在Linux上,可以使用以下命令完成:

sudo apt-get install qt5-qmake

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