一、基本环境
MacBook m1pro,python3.9,已安装pyqt5和pyqtchart。
二、问题
但是调用QtChart的时候一直报以下错误:
Traceback (most recent call last): ……in <module> from PyQt5.QtChart import QDateTimeAxis, QValueAxis, QSplineSeries, QChart ImportError: dlopen(/Users/……/miniconda3/envs/……/lib/python3.9/site-packages/PyQt5/QtChart.abi3.so, 0x0002): Library not loaded: @rpath/QtCharts.framework/Versions/5/QtCharts Referenced from: <3E48343C-E1D4-377F-AA0A-D79048B89F52> /Users/……/miniconda3/envs/……/lib/python3.9/site-packages/PyQt5/QtChart.abi3.so
但我实际上已经下载了PyQtChart包,并且可以输出版本号。
从多个搜索结果来看,这个问题通常有几个关键原因:可能是QtCharts模块没有正确安装;可能是环境变量配置问题导致系统找不到路径;也可能是版本不兼容问题。
首先需要检查Qt的安装情况。在Linux/macOS系统中,QtCharts通常需要单独安装。我安装了PyQtChart这个Python绑定包,但看报错原因是缺少底层的QtCharts C++库。
三、分步解决方案
1. 检查 QtCharts 库实际路径,查找 QtCharts.framework 是否存在
# 查找 QtCharts.framework 是否存在
find /Users/用户名称/miniconda3/envs/环境名称 -name "QtCharts.framework"
如果在这一步find
命令检查QtCharts库路径无输出,表明环境中未安装QtCharts的二进制库文件(QtCharts.framework
或libQt5Charts.dylib
)。PyQtChart的Python包(PyQtChart==5.15.7
)仅是QtCharts的Python绑定,若底层Qt库未安装,仅绑定是无法工作的。
- ✅ 预期输出:
/env_path/site-packages/PyQt5/Qt5/lib/QtCharts.framework
2. 通过Homebrew安装QtCharts核心库
# 安装Qt5(包含QtCharts模块)
brew install qt@5
# 验证QtCharts文件路径
ls /opt/homebrew/opt/qt@5/lib/QtCharts.framework
✅ 应输出:QtCharts
(可执行文件)、Resources
、Versions
等目录。
3. 手动配置动态库路径,强制动态链接器优先搜索 PyQt5 自带的 Qt 库目录
# 临时生效(当前终端)
export DYLD_LIBRARY_PATH="/Users/用户名/miniconda3/envs/虚拟环境名称/lib/python3.9/site-packages/PyQt5/Qt5/lib:$DYLD_LIBRARY_PATH"
# 永久生效(添加到 ~/.zshrc)
echo 'export DYLD_LIBRARY_PATH="/Users/用户名/miniconda3/envs/虚拟环境名称/lib/python3.9/site-packages/PyQt5/Qt5/lib:$DYLD_LIBRARY_PATH"' >> ~/.zshrc
source ~/.zshrc
4. 重装PyQtChart并统一版本
PyQtChart安装最新版,Qt 5.15.10提供二进制库,PyQtChart 5.15.10提供匹配的Python接口。这里建议PyQtChart安装最新版,PyQt5从与PyQtChart相同的版本一路网上 install 直到试到可以成功安装的版本,因为我一开始直接安装PyQt5.15.11跟PyQtChart还是有不兼容的,会报错 note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed,降了版本就好了。
# 卸载冲突的Python包
pip uninstall -y PyQt5 PyQtChart
# 安装严格匹配的版本(需与Qt库版本一致)
pip install PyQt5==5.15.10 PyQtChart==5.15.7
5. 重装PyQtChart并统一版本
# 确认QtCharts.framework存在
ls /opt/homebrew/opt/qt@5/lib/QtCharts.framework
# 检查PyQtChart绑定的动态库
ls /env_path/site-packages/PyQt5/QtChart.abi3.so
我在这一步,是QtCharts.framework存在,即ls /opt/homebrew/opt/qt@5/lib/QtCharts.framework这一项有输出,但是# 检查PyQtChart绑定的动态库 ls /env_path/site-packages/PyQt5/QtChart.abi3.so这一项没有输出,说明QtCharts.framework存在但QtChart.abi3.so缺失),核心问题在于 PyQtChart的Python绑定未正确安装或路径未对齐。
可能原因
- 安装中断:PyQtChart安装过程中编译或文件复制失败。
- 路径错位:绑定库未生成在PyQt5的标准路径(
site-packages/PyQt5/
)下。 - 版本冲突:PyQtChart与PyQt5版本不匹配导致绑定库生成失败。
6. 强制重装PyQtChart并指定路径
# 卸载现有包(避免残留)
pip uninstall -y PyQtChart
# 重装并强制包含二进制文件
pip install PyQtChart==5.15.10 --no-cache-dir --force-reinstall
安装好之后重复第5步检查QtChart.abi3.so这个动态库是否存在
- 关键参数(这一点很重要,我怀疑之前安装就是因为使用了损坏的缓存包导致的问题):
--force-reinstall
:覆盖安装;--no-cache-dir
:避免使用损坏的缓存包。
重新安装之后再重复第五步检查一下QtChart.abi3.so这个动态库是否存在。
# 检查PyQtChart绑定的动态库
ls /env_path/site-packages/PyQt5/QtChart.abi3.so
# 如果返回的是以下样式说明QtChart.abi3.so库已经安装成功
/Users/用户名/miniconda3/envs/虚拟环境名/lib/python3.9/site-packages/PyQt5/QtChart.abi3.so
# 若找到但不在PyQt5目录下,手动复制
cp /found_path/QtChart.abi3.so /Users/用户名/miniconda3/envs/虚拟环境名/lib/python3.9/site-packages/PyQt5/
通过以上步骤就解决了本次问题,mac 做开发还是有很多环境坑要踩的,欢迎大家共同交流。