Проблема со стандартной библиотекой C ++ при установке PyQt4 на macOS - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь собрать PyQt 4, потому что он используется программой, которую мне нужно запустить.

Хотя установить PyQt 5 с помощью одной команды pip install PyQt5 тривиально, это невозможно со старым PyQt 4, и люди рекомендуют собирать его из исходного кода.

Я установил SIP, как предложено для PyQt4 Download .

Я также скачал PyQt 4 и untarr 'редактировать. Теперь, когда я запускаю 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 не настраивается для использования Основанный на Clang C ++ набор инструментов macOS правильно.

Я продолжу копать, но я также хотел бы знать, существует ли тривиальное решение для этой проблемы.

1 Ответ

0 голосов
/ 04 мая 2020

Вероятно, это не лучший / правильный способ сборки PyQt 4, но я собрал его, и теперь моя программа работает.

Для решения, приведенного ниже, требуется установить Qt. Я установил это с

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 я получил ту же ошибку, что и раньше, но на этот раз она возникла из сгенерированного Makefiles. Оказалось, что увеличение версии во флаге -mmacosx-version-min=10.5 до -mmacosx-version-min=10.10 (путем замены этой строки во всех сгенерированных файлах Makefile) привело к ошибке go.

(Моя интерпретация этого состояла бы в том, что более поздние версии MacOS SDK используют не старую стандартную библиотеку C ++ G CC, а библиотеку C ++ их более новой цепочки инструментов Clang C ++.)

После этого при запуске приложения на основе PyQt4 я нажимал:

ImportError: No module named sip

Было найдено решение здесь : мне пришлось перестраивать 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
...