Вопрос или проблема
Я пытаюсь обновить несколько зависимостей Python (в основном remotior-sensus) с помощью OSGeo4W, установленного с QGIS 3.34.9. Это использует Python 3.12.4.
Я следую инструкциям на этом сайте: https://semiautomaticclassificationmanual.readthedocs.io/en/latest/installation_win64.html#qgis-download-and-installation и смог загрузить зависимости, но не могу их установить.
Используя
pip3 install --upgrade remotior-sensus scikit-learn torch
Я получаю следующее:
Требуемая версия уже удовлетворена: remotior-sensus в c:\progra~1\qgis33~1.9\apps\python312\lib\site-packages (0.3.5)
WARNING: Повторная попытка (Retry(total=4, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/remotior-sensus/
WARNING: Повторная попытка (Retry(total=3, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/remotior-sensus/
WARNING: Повторная попытка (Retry(total=2, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/remotior-sensus/
WARNING: Повторная попытка (Retry(total=1, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/remotior-sensus/
WARNING: Повторная попытка (Retry(total=0, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/remotior-sensus/
Не удалось получить URL https://pypi.org/simple/remotior-sensus/: возникла проблема с подтверждением ssl сертификата: HTTPSConnectionPool(host="pypi.org", port=443): максимальное количество попыток превышено с URL: /simple/remotior-sensus/ (вызвано SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))) - пропущено
WARNING: Повторная попытка (Retry(total=4, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/scikit-learn/
WARNING: Повторная попытка (Retry(total=3, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/scikit-learn/
WARNING: Повторная попытка (Retry(total=2, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/scikit-learn/
WARNING: Повторная попытка (Retry(total=1, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/scikit-learn/
WARNING: Повторная попытка (Retry(total=0, connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))': /simple/scikit-learn/
Не удалось получить URL https://pypi.org/simple/scikit-learn/: возникла проблема с подтверждением ssl сертификата: HTTPSConnectionPool(host="pypi.org", port=443): максимальное количество попыток превышено с URL: /simple/scikit-learn/ (вызвано SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))) - пропущено
ОШИБКА: Не удалось найти версию, удовлетворяющую требованию scikit-learn (из версий: ни одной)
ОШИБКА: Нет соответствующего дистрибутива для scikit-learn
Не удалось получить URL https://pypi.org/simple/pip/: возникла проблема с подтверждением ssl сертификата: HTTPSConnectionPool(host="pypi.org", port=443): максимальное количество попыток превышено с URL: /simple/pip/ (вызвано SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] небезопасная устаревшая повторная renegotiation отключена (_ssl.c:1000)'))) - пропущено
У кого-нибудь есть идеи? Мне действительно нужно это установить, чтобы я мог использовать один из инструментов.
UNSAFE_LEGACY_RENEGOTIATION_DISABLED
отключено, и ваша ошибка происходит на _ssl.c:1000.
Я не уверен, используете ли вы Azure, но независимо от этого, это может помочь:
Подтверждение сертификата не прошло. Это обычно происходит, когда используется Azure CLI за прокси, который перехватывает трафик с самоподписанным сертификатом. Пожалуйста, добавьте этот сертификат в доверенный CA bundle. Подробная информация: https://docs.microsoft.com/cli/azure/use-cli-effectively#work-behind-a-proxy.
Источник: https://learn.microsoft.com/en-us/answers/questions/1618774/az-login-(ssl-unsafe-legacy-renegotiation-disabled
Проблема, таким образом, заключается в проблеме подтверждения сертификата, и если вы используете свой CLI за прокси, который перехватывает трафик с самоподписанным сертификатом, то это является причиной проблемы, которую вы видите. Чтобы улучшить ситуацию, убедитесь, что у вас есть правильный CA bundle.
RedHat имеет эту статью о CA bundles прокси: https://docs.openshift.com/container-platform/4.8/security/certificates/updating-ca-bundle.html
Ответ или решение
Ошибка SSL-соединения при обновлении зависимостей Python с помощью pip3
При обновлении зависимостей Python, таких как remotior-sensus
, scikit-learn
или torch
с помощью команды pip3 install --upgrade
, вы столкнулись с ошибкой SSL, связанной с "unsafe legacy renegotiation". Эта проблема может возникать по нескольким причинам, и в данной статье мы рассмотрим основные аспекты ее решения.
Причины ошибки
-
Безопасность SSL: Сообщение об ошибке указывает, что "нераспознанная старая переориентация" (unsafe legacy renegotiation) отключена. Это связано с тем, что современные версии OpenSSL и Python стараются поддерживать более высокий уровень безопасности, и некоторые старые методы шифрования могут быть отключены.
-
Проблемы с сертификатами: Чаще всего ошибка возникает из-за проблем с проверкой SSL-сертификатов, что может быть связано с использованием устаревших сертификатов или с тем, что ваше соединение проходит через прокси-сервер, который использует самоподписанные сертификаты.
Решения проблемы
1. Проверка сетевых настроек
Если вы находитесь за прокси-сервером, возможно, он перехватывает трафик и использует свой собственный сертификат. В этом случае вам необходимо добавить этот сертификат в доверенный CA-репозиторий. Вы можете сделать это, проследуя за следующими шагами:
- Получите сертификат: Узнайте у вашего сетевого администратора, каким образом можно получить корневой сертификат вашего прокси-сервера.
- Добавьте сертификат в хранилище: После получения сертификата добавьте его в хранилище сертификатов Python. Это можно сделать, обновив
cacert.pem
файл, который используется для проверки SSL.
2. Обновление pip
Убедитесь, что вы используете последнюю версию pip
. Для этого выполните команду:
python -m pip install --upgrade pip
Иногда обновление pip
может помочь устранить проблемы с совместимостью, обеспечивая поддержку последних стандартов безопасности.
3. Настройки OpenSSL
Если вы используете Windows, вы можете изменить параметры OpenSSL. Убедитесь, что в вашей системе установлена последняя версия OpenSSL. Если вы контролируете среду, в которой выполняется Python, вам следует проверить, включен ли пакет openssl
и его версии:
- Откройте терминал.
- Введите команду
python -c "import ssl; print(ssl.OPENSSL_VERSION)"
для проверки версии OpenSSL. - Если версия устарела, рассмотрите возможность ее обновления.
4. Использование альтернативных источников
Если ошибка сохраняется, вы можете попробовать использовать альтернативные источники или зеркала для установки пакетов:
pip install --upgrade remotior-sensus scikit-learn torch --index-url https://pypi.python.org/simple
или вы можете отключить проверку SSL (но это небезопасно и не рекомендуется):
pip install --upgrade remotior-sensus scikit-learn torch --trusted-host pypi.org --trusted-host files.pythonhosted.org
Заключение
Проблемы с SSL-соединением при работе с pip
могут иметь множество причин, включая настройки безопасности и проблемы с сертификатами. Чтобы устранить данную ошибку, проверьте параметры сети, обновите pip
и соответствующие сертификаты, и при необходимости используйте альтернативные источники. Следуя представленным рекомендациям, вы сможете обновить свои зависимости и продолжить эффективную работу с Python.