Вопрос или проблема
Я использовал python 3.6 на своем компьютере с ubuntu и столкнулся с этой ошибкой при проведении тестирования:
CryptographyDeprecationWarning: Python 3.6 больше не поддерживается основной командой Python. Поэтому поддержка этого языка устарела в библиотеке cryptography и будет удалена в будущих релизах.
...
from OpenSSL import crypto, SSL
default: Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1550, в <module>
default: класс X509StoreFlags(object):
default: Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1570, в X509StoreFlags
default: CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
default: AttributeError: модуль 'lib' не имеет атрибута 'X509_V_FLAG_CB_ISSUER_CHECK'
Я исследовал эту ошибку. Установил python 3.9 и затем обновил альтернативы, чтобы назначить python 3.9 в качестве основного python для использования. Затем я переустановил и обновил OpenSSL и Cryptography.
sudo pip3 install pyOpenSSL --upgrade
sudo pip3 install cryptography --upgrade
Я снова провел тестирование и все еще сталкиваюсь с той же ошибкой.
Я решил проверить папку dist-packages для python3.9 (/usr/local/lib/python3.9/dist-packages/) и понял, что OpenSSL и Cryptography нигде не находятся. Они находятся в /usr/local/lib/python3.6/dist-packages/. Может быть, это причина, почему ошибка сохраняется?
Я столкнулся с этим с pyOpenSSL==19.0.0
и смог решить это с помощью
pip3 install pyOpenSSL --upgrade
Похоже, что это связано с обновлением pip 22.2.2. Проверьте, можете ли вы обновить pyOpenSSL до 22.0.0, чтобы решить проблему.
Дайте мне знать, если это не сработает.
У меня была такая же проблема. Вам нужно обновить pip до последней версии.
- Удалите старую версию
sudo apt remove python3-pip
- Согласно руководству по установке pip, выполните следующее:
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
Мой pip перестал работать из-за этой проблемы (я не мог даже получить версию).
Я решил эту проблему, скачав проблемный пакет с pypi.org и обновив его с помощью модуля easy_install:
python3 -m easy_install pyOpenSSL-22.0.0-py2.py3-none-any.whl
После обновления cryptography до версии 38.0.1 команда pip была полностью сломана на моей системе Linux, и я не мог ее исправить никаким образом. Я смог решить проблему только удалив строку
“CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK”
из файла /usr/lib/python3/dist-packages/OpenSSL/crypto.py
Ура! После этого pip снова заработал, и я смог понизить версию cryptography до версии, совместимой с pyOpenSSL==20.0.1:
pip uninstall cryptography
pip install –upgrade cryptography==36.0.2
У меня была такая же ошибка. Я обновил пакет pyOpenSSL до версии 22.0.0. Теперь все работает хорошо.
pyOpenSSL
< 22.0.0, похоже, несовместим, поскольку они не зафиксировали пакет cryptography
. Поскольку последний пакет cryptography
был установлен в версии перед 22.0.0, они просто ломаются.
Соответствующая проблема на Github: https://github.com/pyca/pyopenssl/issues/1143
Предупреждение!!! если вы используете pyOpenSSL==20.0.1 и получаете эту ошибку при сборке нового образа контейнера. Обновление до pyOpenSSL==22.0.0 может решить эту проблему, но может вызвать увеличенную нагрузку на ЦП. Это приводит к потере 50% qps для нашей системы, которая обрабатывает тяжелые запросы и загрузку.
В конечном итоге мы откатили pyOpenSSL==22.0.0 до pyOpenSSL==20.0.1 и вручную установили cryptography==36.0.2, чтобы решить проблему.
Я исправил это, удалив директорию пакета openSSL python
sudo rm -R /usr/lib/python3/dist-packages/OpenSSL
Затем просто установите библиотеку OpenSSL снова
pip3 install pyOpenSSL --upgrade
Обратите внимание, когда я говорю “в какой ситуации мы сейчас находимся”, я имею в виду тот факт, что каждая версия pyOpenSSL до версии 22.0.0 несовместима с версиями cryptography начиная с 38.0.0, но pip этого не знает, поэтому не может правильно решить проблему с зависимостями.
https://github.com/pyca/pyopenssl/issues/1143#issuecomment-1246086105
В моем случае на моем Ubuntu 20.04 установлена версия pyOpenSSL 19.0.0, а версия cryptography – 38.0.3.
У меня была та же проблема. Когда это произошло, я увидел лог, похожий на этот.
Oct 26 00:59:45 d51307 certbot[4185368]: from OpenSSL import crypto, SSL
Oct 26 00:59:45 d51307 certbot[4185368]: Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1553, в <module>
Oct 26 00:59:45 d51307 certbot[4185368]: класс X509StoreFlags(object):
Oct 26 00:59:45 d51307 certbot[4185368]: Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1573, в X509StoreFlags
Oct 26 00:59:45 d51307 certbot[4185368]: CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
Oct 26 00:59:45 d51307 certbot[4185368]: AttributeError: модуль 'lib' не имеет атрибута 'X509_V_FLAG_CB_ISSUER_CHECK'
Oct 26 00:59:45 d51307 systemd[1]: certbot.service: главный процесс завершился, код=выход, статус=1/НЕУДАЧА
Затем я попробовал apt remove python3-pip
и apt install python3-pip
, и это помогло мне. Затем я запустил certbot
, и он заработал
Сначала закомментируйте строку ниже в /usr/lib/python3/dist-packages/OpenSSL/crypto.py
CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
Затем выполните следующие команды, чтобы обновить pip3 и pyopenssl
pip3 install pip --upgrade
pip3 install pyopenssl --upgrade
Наконец, раскомментируйте строку на первом шаге. Теперь вы должны иметь возможность использовать pip3
Мне удалось решить эту проблему, понизив библиотеку cryptography с помощью следующей команды.
pip install cryptography==36.0.0
Это кажется конфликтом зависимостей с conda, так как некоторые установленные версии пакетов несовместимы с python в базовом окружении. Чтобы убедиться, что это не вызывает вашу проблему, вы можете выполнить (в базовом окружении)
conda update --all
Это предоставит вам план обновления с разрешенными зависимостями вместе с новейшими установленными версиями и в конечном итоге разрешит конфликт использования pip с пакетом cryptography, который был разрешен в последних обновлениях conda.
После обновления conda введите pip list
, и если это была корень всех проблем, вы избавитесь от этой ошибки.
Ответ или решение
Ошибка с сообщением module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
возникает при использовании библиотеки pyOpenSSL
в сочетании с библиотекой cryptography
, когда версии этих библиотек несовместимы друг с другом. Давайте рассмотрим более подробно причины возникновения этой ошибки и пути их решения.
Причины ошибки
-
Несоответствие версий библиотек:
Ваша работающий код попадает в конфликт версий, когдаpyOpenSSL
с номером версии ниже 22.0.0 не поддерживает функции изcryptography
, которые были введены в более поздних версиях этой библиотеки, таких как 38.0.0 и выше. Специфически, отсутствие атрибутаX509_V_FLAG_CB_ISSUER_CHECK
указывает на то, что используется устаревшая версияpyOpenSSL
, которая не может найти необходимые атрибуты в OpenSSL. -
Устаревшая версия Python:
Вы упомянули, что используете Python 3.6, который больше не поддерживается, что может быть причиной низкой поддержки библиотек, таких какcryptography
, поэтому рекомендуется обновить Python до более актуальной версии, например 3.9 или 3.10.
Решения проблемы
-
Обновление библиотек:
Выполните обновление библиотекpyOpenSSL
иcryptography
до самых последних совместимых версий:pip install --upgrade pyOpenSSL cryptography
Если вы сталкиваетесь с проблемами при этом, вы можете явно установить версии. Например:
pip install pyOpenSSL==22.0.0 cryptography==36.0.2
-
Очистка установленных пакетов:
Если вышеуказанные шаги не помогли, вы можете удалить старые версии библиотек перед их переустановкой:sudo apt remove python3-pip
Затем переустановите
pip
и обновитеpyOpenSSL
иcryptography
:wget https://bootstrap.pypa.io/get-pip.py sudo python3 get-pip.py pip install --upgrade pyOpenSSL cryptography
-
Настройка окружения:
Если проблема сохраняется, рекомендуется рассмотреть использование виртуальных окружений, таких какvenv
илиconda
, что позволит вам управлять зависимостями и версиями библиотек изолированно от системы:python3.9 -m venv myenv source myenv/bin/activate pip install pyOpenSSL cryptography
-
Комментирование кода (временное решение):
Как последний шаг для временного решения, вы можете закомментировать строку, которая вызывает ошибку в файлеcrypto.py
:# CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
После чего обновите библиотеки. Однако, это не рекомендуется как постоянное решение, так как это может вызвать непредвиденные проблемы в других частях кода.
Заключение
Ошибка module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
вызвана несоответствием между версиями pyOpenSSL
и cryptography
. Для стабильной работы вашего приложения необходимо обновить эти библиотеки до совместимых версий, а также убедиться, что используемая версия Python поддерживается. Рекомендуется использовать виртуальные окружения для изоляции зависимостей и предотвращения конфликтов между библиотеками.