Когда я запускаю 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
Я подозреваю, что это связано с конфликтом между пакетами 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:
0.5.6-5.el7
, opstools 0.4.6-3.el7
(не актуально для certbot
но для borgbackup, который я также поддерживаю в Fedora / EPEL.2.6.0-0.el7
, opstools 2.19.1-4.el7
1.10.2-7.el7
( python-urllib3
), opstools 1.21.1-1.el7
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
Надеюсь, это кому-то поможет.
Это помогло в моем случае (другие решения из этой темы не помогли). Спасибо.
Самый полезный комментарий
Это мое решение: