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架构中无法使用。

### PySide2 安装指南 PySide2 是 Qt 的官方 Python 绑定库,用于开发跨平台的 GUI 应用程序。以下是关于如何安装 PySide2 的详细说明: #### 使用 `pip` 命令安装 最简单的方式是通过 `pip` 工具直接从 PyPI 上获取最新版本的 PySide2[^1]。 运行以下命令完成安装: ```bash pip install PySide2 ``` 此方法适用于大多数操作系统(Windows、macOS 和 Linux),前提是已正确配置好 Python 环境并确保 `pip` 可正常工作。 --- #### 手动安装(Linux 下) 对于某些特定需求或者定制化场景,可能需要手动编译和安装 PySide2。这通常涉及以下几个步骤[^3]: 1. **准备依赖项** 需要提前安装一些必要的工具和库,例如 `python`, `QT`, `libclang`, 和 `cmake`。具体版本要求可以参考官方文档中的兼容性列表。 在基于 Debian 或 Ubuntu 的系统上,可执行如下命令来安装这些依赖项: ```bash sudo apt-get update sudo apt-get install -y build-essential git python3-dev python3-pip clang cmake qt5-default ``` 2. **下载源码包** 访问 [PySide2 GitHub Releases 页面](https://github.com/qt/qtsvg/releases),找到适合当前系统的预构建二进制文件或克隆仓库进行自定义编译。 3. **编译与安装** 如果选择自行编译,则需按照官方提供的脚本逐步操作。典型流程包括设置环境变量、调用 `setup.py` 脚本来启动构建过程等。更多细节参见官方 Getting Started 文档。 --- #### PySide2 与其他框架对比 相较于 PyQt5,PySide2 提供了更宽松的许可证模式(LGPLv3/GPLv2)。这意味着开发者可以在不开源自己项目的情况下合法使用该库[^2]。此外,在功能实现方面两者基本一致,因此迁移成本较低。 --- ### 总结 无论是采用自动化方式还是手工部署方案都可以顺利完成 PySide2 的引入工作;前者更适合快速原型设计阶段而后者则给予用户更大的灵活性去调整内部参数设定满足特殊场合下的应用需求。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值