Certbot: AttributeError: объект 'модуль' не имеет атрибута 'pyopenssl'

Созданный на 30 авг. 2018  ·  35Комментарии  ·  Источник: certbot/certbot

Когда я запускаю certbot так:
sudo certbot --nginx
Я получил:

Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.26.1', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 570, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2751, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2405, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2411, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 39, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'

моя версия python 2.7.12 и linux os: 7.4

fedora / redhat / CentOS help wanted

Самый полезный комментарий

Это мое решение:

pip install requests==2.6.0
easy_install --upgrade pip

Все 35 Комментарий

Я подозреваю, что это связано с конфликтом между пакетами Python, установленными из диспетчера пакетов вашей ОС, и pip как в # 6245.

На какой ОС Linux вы работаете и как вы устанавливали Certbot?

У меня такая же (или почти такая же) ошибка:

# yum install certbot
...
Running transaction
  Installing : pyOpenSSL-0.13.1-3.el7.x86_64                                                                                                                                                            1/6
  Installing : python2-josepy-1.1.0-1.el7.noarch                                                                                                                                                        2/6
  Installing : python-ndg_httpsclient-0.3.2-1.el7.noarch                                                                                                                                                3/6
  Installing : python2-acme-0.26.1-1.el7.noarch                                                                                                                                                         4/6
  Installing : python2-certbot-0.26.1-2.el7.noarch                                                                                                                                                      5/6
  Installing : certbot-0.26.1-2.el7.noarch                                                                                                                                                              6/6
  Verifying  : pyOpenSSL-0.13.1-3.el7.x86_64                                                                                                                                                            1/6
  Verifying  : python2-josepy-1.1.0-1.el7.noarch                                                                                                                                                        2/6
  Verifying  : python2-acme-0.26.1-1.el7.noarch                                                                                                                                                         3/6
  Verifying  : python2-certbot-0.26.1-2.el7.noarch                                                                                                                                                      4/6
  Verifying  : certbot-0.26.1-2.el7.noarch                                                                                                                                                              5/6
  Verifying  : python-ndg_httpsclient-0.3.2-1.el7.noarch                                                                                                                                                6/6

Installed:
  certbot.noarch 0:0.26.1-2.el7

Dependency Installed:
  pyOpenSSL.x86_64 0:0.13.1-3.el7    python-ndg_httpsclient.noarch 0:0.3.2-1.el7    python2-acme.noarch 0:0.26.1-1.el7    python2-certbot.noarch 0:0.26.1-2.el7    python2-josepy.noarch 0:1.1.0-1.el7     

Complete!
# certbot --version
Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.26.1', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 39, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'

Версия ОС: CentOS Linux, выпуск 7.5.1804 (Core)

Edit2: Что касается https://github.com/certbot/certbot/issues/6245 , python-urllib3 был установлен с использованием yum, а текущая версия (1.10.2-5.el7) не имеет упомянутой символической ссылки в packages/ssl_match_hostname но как обычный каталог с файлами в нем.

Попытка воспроизвести проблему привела меня к следующему:

# python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib3.contrib.pyopenssl
>>> urllib3.contrib.pyopenssl.inject_into_urllib3()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 118, in inject_into_urllib3                                                                                                   
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 153, in _validate_dependencies_met                                                                                            
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
>>>
# yum info pyOpenSSL
...
Installed Packages
Name        : pyOpenSSL
Arch        : x86_64
Version     : 0.13.1
Release     : 3.el7
Size        : 628 k
Repo        : installed

Таким образом, очевидно, существует скрытая зависимость версии для urllib3.contrib.pyopenssl от pyOpenSSL v0.14, которая на данный момент не поддерживается Centos7.

Изменить: после установки более новой версии (0.15.1) с https://cbs.centos.org/koji/buildinfo?buildID=1500 указанная выше ошибка исчезнет, ​​но не ошибка, созданная certbot.

Несколько проб и ошибок с usr/lib/python2.7/site-packages/acme/client.py привели меня к открытию, что когда я комментирую импорт from requests_toolbelt.adapters.source import SourceAddressAdapter , ошибка исчезает!
К счастью, это используется только один раз, так что, если я предоставлю source_address я могу обойтись без этого не столь тонкого исправления. :)

@ github-abcde, я бы порекомендовал опубликовать на https://community.letsencrypt.org. При новой установке CentOS 7 оба:

python -c 'import requests; requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()'

и

python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'

работать на меня.

Кроме того, после установки python-urllib3 1.10.2-5.el7 /usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py не содержит кода для создания исключения, если версия pyOpenSSL меньше 0,14.

Я думаю, у вас есть набор пакетов из разных источников. На https://community.letsencrypt.org есть более крупное сообщество, которое сможет помочь вам отследить проблему.

Ты прав. После глубокого поиска выяснилось, что что-то, что должно было устанавливать модуль с помощью pip3, фактически установило его с помощью python -m pip ... с использованием python2.7 и перезаписав urllib3/conrtib/pyopenssl.py ... Спасибо для ваших указателей, которые заставили меня искать дальше :)

Та же проблема, что и здесь.

Файл "/usr/lib/python2.7/site-packages/acme/client.py", строка 39, в
urllib3.contrib.pyopenssl.inject_into_urllib3 ()
AttributeError: объект 'модуль' не имеет атрибута 'pyopenssl'

centos 7.3

Это мое решение:

pip install requests==2.6.0
easy_install --upgrade pip

Я сейчас тоже это вижу. Новая установка Centos 7, при этом ничего не установлено через pip, а certbot установлен через yum

Linux localhost.localdomain 3.10.0-862.2.3.el7.x86_64 # 1 SMP среда, 9 мая 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

Совет @monkeyWie мне не

[ vagrant @ localhost ~] Запросы на установку $ pip == 2.6.0
Требование уже выполнено: requests == 2.6.0 в /usr/lib/python2.7/site-packages

Я отлично использовал certbot до тех пор, пока несколько дней назад я не смог заставить его работать ни на одной из моих новых сборок centos 7.

vagrant<strong i="14">@localhost</strong> ~]$ sudo certbot --nginx
Traceback (most recent call last):
  File "/usr/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.27.1', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 484, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2714, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2332, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2338, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 36, in <module>
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()  # type: ignore
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 118, in inject_into_urllib3
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 153, in _validate_dependencies_met
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

Подобные проблемы возникают из-за глобальной установки пакетов как из yum и из pip . К сожалению, я не могу помочь вам очистить среду Python в вашей системе, но если вы опубликуете сообщение на https://community.letsencrypt.org, там будет большая база пользователей, которые смогут помочь.

У меня была чистая установка Centos 7.6, и добавление Certbot из репозитория Epel вызвало ту же проблему. Исправлена ​​проблема при запуске
pip install requests==2.6.0

Я вижу, это все еще проблема.

Одна и та же.
CentOS Linux, выпуск 7.6.1810 (Core)
Установить:

sudo yum install certbot python2-certbot-nginx

И запускаем:

# certbot --help
Traceback (most recent call last):
  File "/usr/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.31.0', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 40, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'

Это мое решение:

pip install requests==2.6.0
easy_install --upgrade pip

Работал у меня на Centos 7

Согласовано. Установка по умолчанию с использованием yum не работает. Нужно исправить это после
первоначальная установка. Хотелось бы установить в рабочем состоянии.

Вск, 14 апреля 2019 г., 07:54 Майкл Линднер, [email protected]
написал:

Это мое решение:

запросы на установку pip == 2.6.0
easy_install --upgrade pip

Работал у меня на Centos 7

-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-482922170 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AMsov79Wu4KJJLs0jJUN-fhs6WO2YROuks5vgsKzgaJpZM4WS5Gq
.

Если кто-нибудь может предоставить инструкции о том, как воспроизвести это, в идеале в чем-то вроде Docker, я был бы рад взглянуть еще раз, но я по-прежнему считаю, что это происходит только в том случае, если вы установили пакеты Python из нескольких источников.

Обычно это вызвано установкой пакетов как из yum и из pip и удалением пакетов, установленных вами с помощью pip и переустановкой их с помощью yum должно решить проблему вопрос.

Я могу подтвердить, что это происходит при чистой установке Centos 7.6 с использованием
Репозиторий EPEL для добавления certbot.

В пн, 15 апреля 2019 г., 19:35 Брэд Уоррен, [email protected] написал:

Если кто-нибудь может дать инструкции, как это воспроизвести, в идеале в
что-то вроде Docker, я был бы рад взглянуть еще раз, но я все еще
считаю, что это происходит только в том случае, если вы установили пакеты Python из нескольких
источники.

Обычно это вызвано установкой пакетов из yum и pip и
удаление пакетов, которые вы установили с помощью pip, и их переустановка
с yum должно решить проблему.

-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-483346939 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AMsovzeRLjz2j0odmgWGxyyAVy9VBp3Tks5vhLhLgaJpZM4WS5Gq
.

У меня была эта проблема (centos)
[bob<strong i="6">@bla</strong> ~]# certbot renew 2>&1 | tail -2 urllib3.contrib.pyopenssl.inject_into_urllib3() AttributeError: 'module' object has no attribute 'pyopenssl'
и пип не установлен
[bob<strong i="10">@bla</strong> ~]# pip install requests==2.6.0 -bash: pip: command not found

Я могу подтвердить, что это происходит при чистой установке Centos 7.6 с использованием репозитория EPEL для добавления certbot.

К сожалению, я не могу воспроизвести его в Docker или VPS.

Я все еще хотел бы, чтобы кому-то удалось воспроизвести это в чем-то легко повторяемом, например, в Docker, но пока что для кого-то, кто сталкивается с проблемой, каков результат следующих команд?

python -c 'import certbot, requests, urllib3, OpenSSL; print("certbot :", certbot.__version__); print("requests: ", requests.__version__); print("urllib3 :", urllib3.__version__); print("OpenSSL :", OpenSSL.__version__)'
ls /usr/lib/python2.7/site-packages/urllib3/contrib

Интересно. Это вторая чистая установка, которую я сделал для Centos 7.

На этот раз я сделал чистую установку с минимальным ISO, и она работает. Я вижу, что установлен пакет запросов Centos - также 2.6. Возможно, что запросы были обновлены, так как изначально возникла эта проблема.
python2-requests-2.6.0-0.el7.noarch

[root<strong i="9">@centos7</strong> ~]# python -c 'import certbot, requests, urllib3, OpenSSL; print("certbot :", certbot.__version__); print("requests: ", requests.__version__); print("urllib3 :", urllib3.__version__); print("OpenSSL :", OpenSSL.__version__)'
('certbot :', '0.31.0')
('requests: ', '2.6.0')
('urllib3 :', '1.10.2')
('OpenSSL :', '0.13.1')
[root<strong i="10">@centos7</strong> ~]# ls /usr/lib/python2.7/site-packages/urllib3/contrib
__init__.py  __init__.pyc  __init__.pyo  ntlmpool.py  ntlmpool.pyc  ntlmpool.pyo  pyopenssl.py  pyopenssl.pyc  pyopenssl.pyo
[root<strong i="11">@centos7</strong> ~]# certbot
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.

Эта проблема возникает у меня на centos 7.6 вместе с ovirt 4.3. Версии пакета

from EPEL:
certbot-0.31.0-2.el7.noarch

from ovirt-4.3-centos-opstools:
python2-requests-2.19.1-4.el7.noarch 
python2-pyOpenSSL-17.3.0-3.el7.noarch

Кажется, что-то странное происходит с пространством имен urllib3.contrib или чем-то в этом роде?

>>> import requests
>>> requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'pyopenssl'
>>> import urllib3.contrib.pyopenssl
>>> urllib3.contrib.pyopenssl.inject_into_urllib3()
>>> dir(urllib3.contrib)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'pyopenssl', 'socks']
>>> from acme import client as acme_client
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/acme/client.py", line 40, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'
>>> dir(urllib3.contrib)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'appengine']

Проблема исчезает, когда я делаю это в acme/client.py :

if sys.version_info < (2, 7, 9):  # pragma: no cover
    import requests.packages.urllib3.contrib.pyopenssl  # pylint: disable=import-error
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()  # type: ignore

Это мое решение:

pip install requests==2.6.0
easy_install --upgrade pip

работал у меня на CentOS 7

Спасибо @monkeyWie - у меня работал на CentOS7

Это мое решение:

pip install requests==2.6.0
easy_install --upgrade pip

pip install acme
работал у меня на Centos 7 после того, как я увидел эту ошибку

ОШИБКА: certbot 1.0.0 требует acme> = 0.40.0, который не установлен.

PS Устанавливайте все из pip, а не из пакетов Centos, иногда они старые

Я могу подтвердить, что это происходит при чистой установке Centos 7.6 с использованием репозитория EPEL для добавления certbot.

К сожалению, я не могу воспроизвести его в Docker или VPS.

Я все еще хотел бы, чтобы кому-то удалось воспроизвести это в чем-то легко повторяемом, например, в Docker, но пока что для кого-то, кто сталкивается с проблемой, каков результат следующих команд?

python -c 'import certbot, requests, urllib3, OpenSSL; print("certbot :", certbot.__version__); print("requests: ", requests.__version__); print("urllib3 :", urllib3.__version__); print("OpenSSL :", OpenSSL.__version__)'
ls /usr/lib/python2.7/site-packages/urllib3/contrib

@bmw мои результаты следующие:

('certbot :', '1.0.0')
('requests: ', '2.6.0')
('urllib3 :', '1.25.7')
('OpenSSL :', '0.13.1')

_appengine_environ.py   appengine.py   __init__.py   ntlmpool.py   pyopenssl.py   _securetransport    securetransport.pyc  socks.pyc
_appengine_environ.pyc  appengine.pyc  __init__.pyc  ntlmpool.pyc  pyopenssl.pyc  securetransport.py  socks.py

что мне кажется нормальным. но эти другие тесты кажутся неудачными:

$ python -c 'import requests; requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute 'packages'

$ python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 118, in inject_into_urllib3
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 160, in _validate_dependencies_met
    "'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

Версия urllib3 упакованная в системах на основе RHEL 7, - 1.10.2, но у вас есть 1.25.7. Вероятно, это было установлено через pip . Удаление urllib3 и повторная установка с помощью yum должны решить эту проблему.

Если вам нужна дополнительная помощь в этом вопросе, я рекомендую разместить сообщение на https://community.letsencrypt.org, где есть большая группа людей, знакомых с Certbot и администрированием сервера, которые смогут вам помочь.

JFYI. У меня была такая же проблема, но у меня нет pip / pip2 или каких-либо пакетов, установленных вручную.

В моем случае у меня был centos-release-opstools который принес python2-urllib3 1.21.1-1.el7 and python2-requests 2.19.1-4.el7`.

После того, как я отключил это репо и переустановил соответствующие пакеты (они переименованы в python-urllib3 1.10.2-7.el7 и python-requests 2.6.0-8.el7_7 в CentOS 7.7) проблема исчезла.

@grossws , спасибо за информацию. Вы помните, в чем было ваше сообщение об ошибке?

Когда я пытаюсь воссоздать эту настройку, Certbot дает сбой:

# certbot --help
Traceback (most recent call last):
  File "/usr/bin/certbot", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 3011, in <module>
    parse_requirements(__requires__), Environment()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 630, in resolve
    raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (cryptography 1.7.2 (/usr/lib64/python2.7/site-packages), Requirement.parse('cryptography>=1.9'))

Это связано с тем, что пакет python2-pyOpenSSL 17.3.0-3.el7 утверждает, что ему требуется python-cryptography >= 1.3.0 , но в Python указана зависимость cryptography>=1.9 которая не установлена.

@bmw , у меня была трассировка https://github.com/certbot/certbot/issues/6328#issuecomment -482531925

Я попытался воспроизвести его в контейнере с помощью всего epel-release + centos-release-opstools но получил тот же конфликт версий о cryptography . Я посмотрел на исходную систему, где у меня возникла ошибка, и обнаружил, что у меня более новая python2-cryptography из centos-release-ovirt42 .

Итак, чтобы воспроизвести, вы можете запустить контейнер докеров с centos:7 и сделать

yum install -y epel-release centos-release-opstools centos-release-ovirt42
yum install -y certbot
certbot --help`

Это весело (в зависимости от вашего определения развлечения).

На образе centos:7 Docker, если вы запустите:

yum install -y epel-release centos-release-opstools centos-release-ovirt42
yum install -y python-requests-toolbelt python2-urllib3
python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'
python -c 'from requests_toolbelt.adapters.source import SourceAddressAdapter; import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'

Первая команда Python завершится успешно, а вторая - нет. Единственное отличие - это импорт from requests_toolbelt.adapters.source import SourceAddressAdapter .

Мы планируем отказаться от поддержки Python 2 в ближайшие несколько месяцев, после чего мы удалим этот код. Из-за этого небольшая команда, которая поддерживает Certbot, вероятно, не будет тратить на это много времени, но если кто-то захочет вникнуть в это, я думаю, было бы хорошо сообщить разработчикам пакетов обо всем, что вызывает эту проблему .

Я открываю это сейчас.

Я считаю, что предположение о какой-либо форме коррупции верно. У меня не было установленного пакета python2, поэтому я не уверен, что я сломал. Однако это разобралось:

yum remove python-urllib3
rm -rf /usr/lib/python2.7/site-packages/urllib3 # yes, you need this too
yum reinstall $(yum list installed | grep python | grep -v python3 | awk '{print $1}')
yum install python-urllib3
yum install certbot

Надеюсь, это кому-то поможет.

Это сработало в моей среде (centos 7 с обновленным urllib3 из pip как @bmw, описанным выше .. моя команда "pip" также возвращала ошибки, поэтому необходимо переустановить):

sudo yum install -y python2-pip
sudo pip uninstall urllib3
sudo yum install -y python-urllib3

Сопровождающий Certbot Fedora / CentOS здесь: НИКОГДА не устанавливайте модули в /usr/lib используя pip . Некоторые пакеты CentOS изменены, чтобы они не дублировали существующий код или для усиления настроек безопасности. Разработчики дистрибутива должны убедиться, что установлены все необходимые пакеты.

Вы можете проверить свою установку на наличие неуправляемых пакетов Python с помощью этой команды:

LANG=C rpm -qf /usr/lib/python2.7/site-packages/* | grep 'is not owned by any package'

Вы не должны получать никаких результатов.

Также проблематичным может быть добавление других репозиториев yum. Fedora EPEL должна на 100% работать с базовыми репозиториями Red Hat / CentOS, но мы не можем принимать во внимание другие репозитории.

Если у вас только что включены репозитории CentOS по умолчанию (+ EPEL), но по-прежнему происходит сбой, сообщите нам об этом. Лучший способ - создать проблему с Bugzilla, но @-упоминание меня здесь тоже работает (на данный момент - специалисты по сопровождению certbot в Fedora / EPEL могут измениться).

@FelixSchwarz , а как насчет пакетов репо CentOS SIG, таких как centos-release-opstools ? Я обычно использую стандартные репозитории + epel, но fluentd доступен только в opstools (

В некоторых случаях я просто заканчивал создание виртуального env с помощью python3 -mvenv /path/to/new/venv и установку там необходимого программного обеспечения (скажем, certbot + required dns verifier). К счастью, он не загрязняет /usr/lib .

@grossws Fedora EPEL должна работать со всем из RHEL Base (так что могут быть другие многоуровневые продукты Red Hat, вызывающие конфликты). Все другие источники могут быть несовместимы, если эти репозитории не очень осторожны и не содержат того же материала, что и RHEL / EPEL.

Я просто проверил репозитории centos-opstools и сразу заметил несколько конфликтов с Fedora EPEL:

  • python2-msgpack: EPEL 7 имеет 0.5.6-5.el7 , opstools 0.4.6-3.el7 (не актуально для certbot но для borgbackup, который я также поддерживаю в Fedora / EPEL.
  • python2-requests: EPEL 7 имеет 2.6.0-0.el7 , opstools 2.19.1-4.el7
  • python2-urllib3: EPEL 7 1.10.2-7.el7 ( python-urllib3 ), opstools 1.21.1-1.el7
  • python-idna: RHEL Base поставляет 2.4-1.el7 , opstools 2.5-1.el7 ( python2-idna )

Это не означает, что репо centos-opstools не работает с пакетами certbot EPEL, но есть некоторые конфликты, и это определенно непроверенная конфигурация. Также centos-opstools заменяет пакет в базе RHEL, что означает, что вам следует быть особенно осторожными, так как это также может сломать много вещей в основном дистрибутиве.

tl; dr: Если вы используете пакеты Certbot EPEL, вам не следует использовать другие репозитории yum / dnf, поскольку они, вероятно, несовместимы. Узнайте у поставщика репо совместимость с базой RHEL и Fedora EPEL.

Также я обнаружил, что внести свой вклад в Fedora EPEL не так уж и сложно, поэтому, если вам не хватает пакета, подумайте о том, чтобы стать сопровождающим пакета (свяжитесь со мной, если вам понадобится руководство).

Я считаю, что предположение о какой-либо форме коррупции верно. У меня не было установленного пакета python2, поэтому я не уверен, что я сломал. Однако это разобралось:

yum remove python-urllib3
rm -rf /usr/lib/python2.7/site-packages/urllib3 # yes, you need this too
yum reinstall $(yum list installed | grep python | grep -v python3 | awk '{print $1}')
yum install python-urllib3
yum install certbot

Надеюсь, это кому-то поможет.

Это помогло в моем случае (другие решения из этой темы не помогли). Спасибо.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги