如何在我的M1芯片的Mac上运行pyqt5(ppc64el架构)?

28

当我运行它时,出现错误

ImportError: dlopen(/Users/v/Library/Python/3.8/lib/python/site-packages/PyQt5/QtWidgets.abi3.so, 2): 找不到适当的映像。找到: /Users/v/Library/Python/3.8/lib/python/site-packages/PyQt5/QtWidgets.abi3.so: mach-o,但架构错误 /Users/v/Library/Python/3.8/lib/python/site-packages/PyQt5/QtWidgets.abi3.so: mach-o,但架构错误


2
显然,M1芯片是如此新颖,以至于Python本身不知道它们的情况。我听说有一种叫做“Rosetta”的东西,可以让你像在Intel Mac上运行一样运行它们。试试看? - coderman1234
PyQt6 从6.2版本开始支持苹果芯片。https://dev59.com/AMPra4cB1Zd3GeqPkJ53#75224682 - ningelsohn
13个回答

51

经过数小时的尝试和错误,我终于成功解决了这个问题。我的成功配置如下:

  1. 使用 Rosetta 2 打开终端 (https://dev.to/courier/tips-and-tricks-to-setup-your-apple-m1-for-development-547g)
  2. 使用非 Homebrew 的 Python(我的在 /usr/bin/python3 中)创建虚拟环境。
/usr/bin/python3 -m venv env
source env/bin/activate
  1. 升级pip
pip install --upgrade pip
  1. 安装PyQt5
pip install PyQt5

3
在Rosetta模式下运行终端对我有用 - 谢谢。 - Henry Ruhs
2
一直在尝试让它工作,整整一天了!该死,谢谢伙计 :) - Gourav
2
请给这个人颁发一枚奖章。 - Philippe Remy
5
@AffableAmbler 我也是这么想的。可以按照以下步骤操作,但如果您不想始终在Rosetta中打开终端,或者只需要一次性运行某些命令,则可以在需要Rosetta的任何命令前加上 arch -x86_64。因此,我的步骤将是:virtualenv env (或您喜欢的任何环境),source env/bin/activatearch -x86_64 pip install PyQt5,然后当您想要运行您编写的任何程序时,arch x86_64 my_wicket_program.py - Axel Jacobsen
2
谢谢@AxelJacobsen,这节省了我很多时间。arch -x86_64在这里很重要。 - rohitkadam19
显示剩余3条评论

18

我需要PyQt5作为Python库的依赖项,这对我有用。请参阅原帖此处

brew install pyqt5
echo 'export PATH="/opt/homebrew/opt/qt@5/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/opt/homebrew/opt/pyqt@5/5.15.4_1/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

2
我还在我的~/.zshrc文件中添加了以下内容:export PYTHONPATH=/opt/homebrew/Cellar/pyqt@5/5.15.7/lib/python3.9/site-packages - Akh

14

我为pyqt5具体所做的是:

brew install pyqt@5

我认为对于版本4和6,这也可能有效。当我只执行 brew install pyqt时,不幸的是,它没有起作用。

注意这仅适用于M1 MacBook。

在Rosetta模式下启动的终端中尝试 pip3 install pyqt5 是需要尝试的另一件事(左键单击-> 获取信息 -> 在Rosetta中打开)。

编辑(2022年11月)

看起来如果你不特别需要pyqt5,现在可以通过pip在M1/M2 Mac上轻松安装pyqt6了。

python -m pip install pyqt6

我正在安装一个使用PyQt5的软件包。我已经成功运行了brew install pyqt@5,但是在执行Collecting PyQt5==5.15.2时安装仍然失败。 - Jeff Bezos
@JeffBezos 或许将该要求从软件包依赖项中移除会跳过安装它?这可能可以与您通过brew安装的版本一起使用。 - LemurPwned
错误:元数据生成失败。 - Artemii Khristich
但是,当我运行pip list --outdated | awk '{print $1}' | xargs -n1 sh -c 'pip install -U "$@" | tee -a upgrade.log' sh来更新所有的软件包时,它会寻找pyqt5!而且卡在了Preparing metadata (pyproject.toml): started这一步。 - Dr.jacky

6

我希望在我的M1 Mac上安装pyqt5,并且不需要使用Rosetta。我想在一个虚拟环境中安装另一个项目的依赖项,该依赖项需要pyqt5,并且不能通过pipx(urh)安装。

不幸的是,目前没有兼容的wheels (curl --silent "https://pypi.org/pypi/PyQt5/json" | grep -i arm64),在3.10上尝试安装失败,并显示AttributeError: module 'sipbuild.api' has no attribute 'prepare_metadata_for_build_wheel'

值得庆幸的是,homebrew版本的pyqt5是为arm64编译的,而且运行很好。

我的步骤如下:

$ # Install pyqt5 via homebrew
$ brew install pyqt@5
$ # Note that it's installed in python3.9, not 3.10
$ brew cat pyqt@5 | grep 'depends_on.*python'
  depends_on "python@3.9"
$ # Make a python3.9 virtualenv with access to the system's site-packages
$ /opt/homebrew/bin/python3.9 -m venv --system-site-packages .venv
$ source .venv/bin/activate

此时我成功地将urh安装到虚拟环境中,使用了从Homebrew获取的arm64编译的pyqt5,无需Rosetta(也无需进一步“污染”我的系统site-packages),并且它按预期运行(因为问题是关于运行的)。


这个对我来说使用python3.9有效,尝试pip3.9安装office365。我认为--system-site-packages可能是关键。 - jrw32982
这是唯一一个对我有效且最容易的方法。应该将其标记为被接受的答案。 - peppapig450

4

尝试按照以下步骤在ARM架构下安装pyqt:

arch -arm64 brew install pyqt


2
你可以使用Homebrew来安装,这是我在Mac M1上发现的唯一可行的方式。
首先:
  brew install pyqt@5

然后:

brew --cellar
brew link --overwrite python

接下来,您需要创建/添加一个 Python 的别名,并将其放在您的 .zprofile 文件中(位于用户/用户名文件夹中,如果按 Shift+Command+. 键)。

这个别名必须指向您的 Homebrew Python 安装位置。

alias python ='opt/homebrew/bin/python3'

这样做可以将Python与您的Homebrew Python链接起来,您可以从终端运行python test.py(其中包含您的Python文件)。 无论我如何尝试使用pip安装,它都会显示错误并且无法工作。


2

我在我的MacM1上安装PyQt5==5.15.6到一个已有的虚拟环境中。

使用所有在这里描述的方法都无法实现。

所以,我做的是:

  1. 以Rosetta模式打开终端
  2. 导航到我的项目并激活虚拟环境:source venv/bin/activate
  3. 安装软件包:pip install PyQt5==5.15.6
  4. 在我的项目中打开常规终端,并确保一切都按照requirements.txt文件中的要求安装:pip install -r requirements.txt

现在一切都运行得很顺利。


1

我想在Python3.6的虚拟环境下运行PyQt5。
以下步骤适用于我的设备:MBA M1 2020,macOS 11.3.1。

pyenv versions
>   system
> * 3.6.15
pip -V
> pip 21.3.1 from /Users/username/.pyenv/versions/3.6.15/lib/python3.6/site-packages/pip (python 3.6)

然后只需运行:

pip install pyqt5-sip
pip install pyqt5

在终端(默认终端,而非带有Rosetta 2的终端)上。

1
如果有人在安装PyQT5时仍然遇到相同的问题,我建议你转而关注PySide6。它与PyQT5几乎相似,且在MacBook m1上运行良好。
我已经花了数小时在互联网上搜寻解决方案,但似乎在下载PyQT5和PyQT5-tools模块时,在MacBook M1上存在一些问题。

1
在我的情况下,这是工作的:arch -x86_64 brew install pyqt 所有需要的 PyQt 都从 arch -x86_64 开始,或者从 Rosetta(通过模拟器)开始。

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