无法在MacOS上安装PyQt5。

3
我已经尝试了无数种安装PyQt5的方法,但是一直收到相同的错误信息。我试图在Python虚拟环境中安装它,但仍然没有成功。我尝试下载Qt以查看是否缺少任何依赖项,但这并没有解决问题。我尝试更新pip、使用Homebrew、下载源代码和许多其他方法,但仍然无法安装它。我正在MacOS上工作。
以下是我尝试过的一个示例:
(env) firstLast@name-MacBook-Pro project % pip install pyqt5   
   
Collecting pyqt5
  Using cached PyQt5-5.15.9.tar.gz (3.2 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Preparing metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [20 lines of output]
      Querying qmake about your Qt installation...
      Traceback (most recent call last):
        File "/Users/name/Documents/final_project/tfod/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/Users/name/Documents/final_project/tfod/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/Users/name/Documents/final_project/tfod/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 152, in prepare_metadata_for_build_wheel
          whl_basename = backend.build_wheel(metadata_directory, config_settings)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/ky/630000/T/pip-build-env-129w2sdq/overlay/lib/python3.11/site-packages/sipbuild/api.py", line 46, in build_wheel
          project = AbstractProject.bootstrap('wheel',
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/ky/630000/T/pip-build-env-129w2sdq/overlay/lib/python3.11/site-packages/sipbuild/abstract_project.py", line 87, in bootstrap
          project.setup(pyproject, tool, tool_description)
        File "/private/var/folders/ky/630000/T/pip-build-env-129w2sdq/overlay/lib/python3.11/site-packages/sipbuild/project.py", line 602, in setup
          self.update(tool)
        File "/private/var/folders/ky/630000/T/pip-install-blf1r8si/pyqt5_7df68330104f4a9dbfac80220bfcd894/project.py", line 165, in update
          raise UserException(
      sipbuild.exceptions.UserException
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
3个回答

5

通用的 macOS 解决方案:

在 macOS 上,安装 PyQt5 时存在一个已知问题,需要在系统上安装 Qt5 并将其 qmake 工具添加到系统的 PATH 中,如其 PyPI 页面的 安装部分 所示。

要安装 Qt5,您可以在终端中运行以下命令:

brew install qt5

安装完成后,您需要找到qmake工具路径,通常在此处找到:/usr/local/opt/qt/bin/qmake。要将此路径添加到系统的PATH中,您需要通过输入以下命令在终端中打开.bash_profile文件:
nano ~/.bash_profile

然后,在文件末尾添加以下行:
export PATH="/usr/local/opt/qt/bin:$PATH"

这将会把qmake安装的目录添加到系统的PATH中。按下 Ctrl + X,然后输入 Y,最后按下回车保存并关闭文件。为了在当前会话中使更改生效,请运行以下命令:

source ~/.bash_profile

您可以通过运行以下命令来验证 qmake 是否已添加到 PATH 中:

which qmake

这应该解决问题并允许您安装PyQt5。


M1芯片的特定解决方案:

M1芯片于2020年11月推出,基于ARMv8.5架构,与Intel-based Mac电脑使用的x86_64架构不同。因此,诸如PyQt之类的应用程序必须编译以包含ARM兼容二进制文件才能在M1芯片上运行。为解决这个问题,Qt团队开发了通用二进制文件,可与Intel和Apple Silicon硬件兼容。

然而,这些通用二进制文件仅从版本6.2及以上版本提供。可以通过运行以下命令来确认:

aviolaris@arch:~$ curl -s https://pypi.org/pypi/PyQt5/json | jq -r '.releases | to_entries[] | .value[] | select(.filename | contains("universal")) | .url | split("/") | .[-1]'

aviolaris@arch:~$ curl -s https://pypi.org/pypi/PyQt6/json | jq -r '.releases | to_entries[] | .value[] | select(.filename | contains("universal")) | .url | split("/") | .[-1]'
PyQt6-6.2.0-cp36-abi3-macosx_10_14_universal2.whl
PyQt6-6.2.1-cp36-abi3-macosx_10_14_universal2.whl
PyQt6-6.2.2-cp36-abi3-macosx_10_14_universal2.whl
PyQt6-6.2.3-cp36-abi3-macosx_10_14_universal2.whl
PyQt6-6.3.0-cp37-abi3-macosx_10_14_universal2.whl
PyQt6-6.3.1-cp37-abi3-macosx_10_14_universal2.whl
PyQt6-6.4.0-cp37-abi3-macosx_10_14_universal2.whl
PyQt6-6.4.1-cp37-abi3-macosx_10_14_universal2.whl
PyQt6-6.4.2-cp37-abi3-macosx_10_14_universal2.whl
PyQt6-6.5.0-1-cp37-abi3-macosx_10_14_universal2.whl
PyQt6-6.5.0-cp37-abi3-macosx_10_14_universal2.whl

话虽如此,如果您明确不想使用与您系统架构兼容的PyQt6,您可以尝试使用Rosetta安装PyQt5。Rosetta是一款内置模拟器,可让您在基于ARM的Mac电脑上运行x86_64软件。

使用Rosetta:

  • 转到应用程序,选择实用工具并找到您的终端应用程序。
  • 右键单击终端应用程序,然后选择复制
  • 将副本应用程序重命名为类似"Terminal_x86_64"的名称。
  • 右键单击Terminal_x86_64应用程序,选择获取信息并启用使用Rosetta打开选项。
  • 打开Terminal_x86_64应用程序,输入arch以验证它现在显示为"x86_64"。
完成这些步骤后,您将能够通过输入相关的pip命令在Terminal_x86_64应用程序中安装PyQt5。

qmake 的位置似乎是有效的,并已添加到系统的 PATH 中,因此无需更改。你的 MacBook 是否有 M1 芯片? - Andreas Violaris
那很可能是原因。请检查更新后的答案,让我知道是否适用于您。 - Andreas Violaris
curl ... 命令没有返回任何内容。我有 m2。 - Dr.jacky
1
@Dr.jacky 两个curl命令仅用于演示如何确定哪些版本的PyQt包含通用二进制文件。第一个curl命令,您可能正在引用它,检查PyQt5并返回无结果,因为它缺少通用二进制文件。第二个curl命令检查PyQt6并显示具有通用二进制文件的版本。但是,需要注意的是,尽管这些命令有助于更好地理解主题,但它们对问题解决并不重要。 - Andreas Violaris
1
@Dr.jacky 这两个curl命令仅用于演示如何确定哪些版本的PyQt包含通用二进制文件。第一个curl命令,你可能指的是它,检查PyQt5并返回无结果,因为它缺少通用二进制文件。第二个curl命令检查PyQt6并显示具有通用二进制文件的版本。然而,需要注意的是,虽然这些命令有助于更好地理解主题,但对于问题的解决并非必需。 - Andreas Violaris
显示剩余5条评论

1
pip install pyqt6

在Python 3.9.17、MacOS 13.3和M2 Pro上,对我来说毫无问题地工作。

-1

MacOS M1-2芯片:Iterm应用程序:

首先:打开应用程序 => 右键单击Iterm => 获取信息 输入图像描述

其次:点击使用Rosetta打开 输入图像描述

第三步:打开Iterm:

pip3 install PyQt5

这在我的情况下起作用了


1
这似乎是对现有答案的“感谢”,而不是新答案。请不要重复回答。 - Chris

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