mac(Apple Silicon)安装 pyside2 的惨痛经历

由于需要重构项目,以前是在 ubuntu上使用的 pyside2。现在换了 M1 的 mac,于是现在准备在自己的电脑上重新安装环境安装环境。结果没想到状况百出。-_-


首先要准备好 Qt 的环境。

brew install qt
brew install qt@5

然后,我就兴致冲冲的准备安装 pyside2 了。当然很熟练的使用了 pip,结果:


后来查到, pyside2 并不支持 M1 的 Mac,所以无法查询到该包。

正在我不知道怎么办的时候,突然灵光一闪。我想起以前用 Manjaro 的使用我可以直接使用 pacman(这是 Manjaro 使用包管理器) 去安装一些 Python 的包。于是我想到 brew 是不是也可以呢?

没想真的有,可以看到有一个 pyside@2 的包,然后我就熟练的使用 brew install pyside@2 安装了它。然后我就用 pip freeze 看了下,并没有 pyside2,因为以前用 pacman 安装 python 的库的时候, pip 是可以找到的。接着尝试在 ipython 里导入也是失败了。

于是我尝试查看一下 python 库文件的目录,发现并没有包含这个目录。

import sys
print(sys.path)

我们可以通过添加环境变量的方式将其加入其中,让 Python 也查询该目录。

export PYTHONPATH=$PYTHONPATH:/opt/homebrew/Cellar/pyside@2/5.15.2/lib/python3.9/site-packages

完成后,我再次在 ipython 中尝试导入 pyside2,果然成功了。

让后我尝试运行了一个最小 demo,也成功了。

import sys
from PySide2.QtCore import Qt
from PySide2.QtWidgets import QApplication, QLabel
                                                     

if __name__ == "__main__":
    app = QApplication(sys.argv)
    label = QLabel("Hello World", alignment=Qt.AlignCenter)
    label.show()
    sys.exit(app.exec_())

这时我就很兴奋了准备运行项目了。可是万万没想到,又出事了。

因为在项目中使用 QtWebEngineWidgets 组件,而似乎并没有这组件。没办法,我就去 pyside@2 的目录中查看。
可以看到确实没有这个组件,我真的是服了。

然后怎么办呢?于是,我有想到尝试从源码去构建。我先是去官网下载了源码。

这里把地址贴出来。https://download.qt.io/official_releases/QtForPython/pyside2/

然后我进到源码的目录中使用 python setup.py install 安装,由于时 c++,所以在安装前需要先 build, 然后问题就来了…

它先是告诉我找不到 Qt5,ok 我告诉它。

  echo 'export PATH="/opt/homebrew/opt/qt@5/bin:$PATH"' >> ~/.zshrc

  export LDFLAGS="-L/opt/homebrew/opt/qt@5/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/qt@5/include"

然后它又告诉我找不到 clang,没问题,我也告诉它。
在这里插入图片描述

export LLVM_INSTALL_DIR=/opt/homebrew/Cella/llvm/11.1.0                           

终于可以开始编译了,万万没想到又有事。


找不到命名空间,这个问题真的是整的我好惨。于是我全网找寻解决方法,皇天不负有心人,最后我找到了方法。

这个命名空间的定义是在 <math.h> 这个文件中,而 <cmath> 中确实有引入它,但是由于 Mac 的保护机制,并不能成功的引入这个文件。所以需要修改这句引入的语句。

//#include <math.h>
#include </Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/math.h>

在此之前你可能需要 xcode-select --install,因为查找库的依赖。相信使用 Mac 的同学肯定都安装过,但是苹果可能在系统更新的时候将它卸载掉。-_-

让我们再次安装 pyside2,这次终于可以成功编译了。在我经过了漫长的等待后,已经成功安装了。于是我又兴奋的运行项目,结果还是没有 QtWebEngineWidgets。感觉白从源码构建了。

当然,如果你不需要这个组件,那么在 brew 安装时就已经可以了。然而我该怎么解决呢?


ok,经过坚持不懈的努力,我又找到了原因。我又去 pyside2 的源码中看看了,是包含 QtWebEngine 相关的源码的。
那么编译时为什么没有加入了,后来我发现是因为 Apple Silicon 版的 Qt5 不包含 QtWebengine。因为Qt中web相关组件依赖x86平台的底层,所以在arm架构中无法使用。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值