Сборка PyQt5 под Windows с поддержкой OpenSSL?

Я пытаюсь собрать PyQt5 с поддержкой SSL, но до сих пор не добился успеха вообще.

Что я сделал:

  • Перестройте Qt с поддержкой OpenSSL: ОК

    configure.exe -static -debug-and-release -opensource -confirm-license -nomake examples -nomake tests -opengl desktop -platform win32-g++ -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I C:\OpenSSL-Win32\include -L C:\OpenSSL-Win32\lib
    
    mingw32-make
    
  • Установить SIP: ОК

    python configure.py -p win32-g++
    mingw32-make
    mingw32-make install
    
  • Установите PyQt5: ОК

    python configure.py --spec=win32-g++
    mingw32-make
    mingw32-make install
    
    • Изменить configure.py файл, добавив 'printsupport' на QtWebKitWidgets ModuleMetadata:

      'QtWebKitWidgets': ModuleMetadata(qmake_QT=['webkitwidgets', 'printsupport']),

      вместо

      'QtWebKitWidgets': ModuleMetadata(qmake_QT=['webkitwidgets']),

    • После (или до?) mingw32-makeудалить строку

      -strip C:$(INSTALL_ROOT)\Python34\pyuic5.bat

      от цели install_pyuic5:

  • Тест: НЕ ОК

    >>> from PyQt5.QtNetwork import QSslSocket
    >>> QSslSocket.supportsSsl()
    False
    

Итак, мои вопросы:

  1. Я делаю что-то не так?
  2. Нужна ли какая-либо другая конфигурация?

Почему я спрашиваю... Если все в порядке, я пытаюсь получить доступ (с QWebview) к некоторым https URL-адреса, и я получаю много или ошибки SSL, такие как:

    QSslSocket: cannot call unresolved function SSLv23_client_method
    QSslSocket: cannot call unresolved function SSL_CTX_new
    QSslSocket: cannot call unresolved function SSL_library_init
    QSslSocket: cannot call unresolved function ERR_get_error

Заранее спасибо!

1 ответ

Решение

Задача решена!

  1. Загрузите и установите "облегченную" версию OpenSSL
  2. Выполните описанную выше процедуру, чтобы перестроить Qt с поддержкой OpenSSL + установить SIP + установить PyQt
  3. копия ssleay32.dll, libeay32.dll а также libssl32.dll в папку Qt > mingw > bin (C:\Qt\Qt5.3.2\5.3\mingw482_32\bin в моем случае)

Теперь вы можете увидеть большой True когда вы делаете QSslSocket.supportsSsl() тестовое задание.

Другие вопросы по тегам