在 macOS 上安装 PyQt4 时 C++ 标准库出现问题

Posted

技术标签:

【中文标题】在 macOS 上安装 PyQt4 时 C++ 标准库出现问题【英文标题】:Problem with C++ standard library when installing PyQt4 on macOS 【发布时间】:2020-05-04 12:00:07 【问题描述】:

我正在尝试构建 PyQt 4,因为它被我需要运行的程序使用。

虽然使用单个命令 pip install PyQt5 安装 PyQt 5 很简单,但对于较旧的 PyQt 4 则无法做到这一点,人们建议从源代码构建它。

我已经按照PyQt4 Download 的建议安装了 SIP。

我还下载了 PyQt 4 并将其解压缩。现在,当我运行 python configure.py --verbose 时,我得到了

Stanislaw@home:PyQt4_gpl_mac-4.12.3 (master)*$ python configure.py --verbose
Determining the layout of your Qt installation...
/usr/local/bin/qmake -spec macx-g++ -o qtdirs.mk qtdirs.pro
make -f qtdirs.mk
g++ -c -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SHARED -I/usr/local/etc/qt4/mkspecs/macx-g++ -I. -I/usr/local/Cellar/qt@4/4.8.7_6/lib/QtCore.framework/Versions/4/Headers -I/usr/local/Cellar/qt@4/4.8.7_6/lib/QtCore.framework/Versions/4/Headers -I/usr/local/include -I. -F/usr/local/lib -o qtdirs.o qtdirs.cpp
warning: include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead [-Wstdlibcxx-not-found]
...
/usr/local/lib/QtCore.framework/Headers/qglobal.h:68:10: fatal error: 'algorithm' file not found
#include <algorithm>
         ^~~~~~~~~~~

我对 Qt/qmake 没有任何经验,但我猜这个旧版本的 PyQt 没有配置自己正确使用 macOS 的基于 Clang 的 C++ 工具链。

我会继续挖掘,但我也想知道这个问题是否存在简单的解决方案。

【问题讨论】:

【参考方案1】:

这可能不是构建 PyQt 4 的最佳/正确方法,但我构建了它,现在我的程序正在运行。

以下解决方案需要安装 Qt。我installed它与

brew install cartr/qt4/pyqt@4

现在是 PyQt 部分。

PyQt 安装包括 3 个步骤:

 python configure.py
 make
 make install

使python configure.py 步骤工作 我必须在 configure.py 文件中更改它:

-qt_macx_spec = 'macx-g++'
+qt_macx_spec = 'macx-llvm'

在第二步,当运行make 时,我得到了和以前一样的错误,但这次它来自生成的 Makefile。事实证明,将 -mmacosx-version-min=10.5 标志中的版本增加到 -mmacosx-version-min=10.10(通过在所有生成的 Makefile 中替换此行)使错误消失。

(我对此的解释是,更高版本的 macOS SDK 不使用 GCC 的旧 C++ 标准库,而是使用其较新的 Clang C++ 工具链的 C++ 库。)

之后,当我运行基于 PyQt4 的应用程序时,我点击了:

ImportError: No module named sip

找到了解决方案here:我不得不用附加标志重建 SIP:

cd sip-4.19.22
# `make clean` is important otherwise rebuilding will not work
# your program might complain with
# "ValueError: PyCapsule_GetPointer called with incorrect name"
make clean 
python configure.py --sip-module PyQt4.sip

【讨论】:

以上是关于在 macOS 上安装 PyQt4 时 C++ 标准库出现问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pip 在 Windows 上安装 PyQt4?

如何标数据

在 Lion (OSX) 上安装 PyQt4 时出现问题

如何在 MacOS 上使用 OpenCV 链接 C++ 程序 [重复]

在Ubuntu14.04下安装 labelImg (标数据用)

无法在 python 中导入模块:PyQt4 与 SIP 冲突