Certbot: AttributeError: الكائن "module" ليس له سمة "pyopenssl"

تم إنشاؤها على ٣٠ أغسطس ٢٠١٨  ·  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: 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: الكائن "module" ليس له سمة "pyopenssl"

سنتوس 7.3

هذا هو الحل الخاص بي:

pip install requests==2.6.0
easy_install --upgrade pip

أنا أرى هذا الآن أيضًا. تثبيت جديد لـ Centos 7 ، بدون تثبيت أي شيء آخر عبر نقطة ، و certbot مثبت عبر yum

Linux localhost.localdomain 3.10.0-862.2.3.el7.x86_64 # 1 SMP الأربعاء 9 مايو 18:05:47 بالتوقيت العالمي المنسق 2018 x86_64 x86_64 x86_64 GNU / Linux

لم تنجح نصيحة monkeyWie بالنسبة لي

[ المتشرد @ localhost ~] طلبات تثبيت $ pip == 2.6.0
تم تلبية المتطلبات بالفعل: الطلبات == 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 repo تسبب في نفس المشكلة. تم حل المشكلة عن طريق التشغيل
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 ، الساعة 7:54 مساءً ، Michael Lindner ، [email protected]
كتب:

هذا هو الحل الخاص بي:

طلبات تثبيت النقطة == 2.6.0
easy_install - ترقية نقطة

عملت لدي على 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 repo لإضافة certbot.

في الإثنين ، 15 أبريل 2019 ، الساعة 19:35 ، كتب براد وارن ، [email protected] :

إذا كان بإمكان أي شخص تقديم إرشادات حول كيفية إعادة إنتاج هذا ، فمن الأفضل في
شيء مثل Docker ، سأكون سعيدًا بإلقاء نظرة أخرى ، لكنني ما زلت
أعتقد أن هذا يحدث فقط إذا قمت بتثبيت حزم Python من عدة
المصادر.

يحدث هذا عادةً بسبب تثبيت الحزم من كل من yum و pip و
إزالة الحزم التي قمت بتثبيتها مع النقطة وإعادة تثبيتها
مع yum يجب أن يحل المشكلة.

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-483346939 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AMsovzeRLjz2j0odmgWGxyyAVy9VBp3Tks5vhLhLgaJpZM4WS5Gq
.

لدي هذه المشكلة (سنتوس)
[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 repo لإضافة 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 قم بتثبيت كل شيء بدءًا من النقطة ، بدلاً من حزم Centos ، فهي قديمة في بعض الأحيان

أستطيع أن أؤكد أنه يحدث مع تثبيت نظيف لـ Centos 7.6 باستخدام EPEL repo لإضافة 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- طلبات 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 repo.

لذا ، لإعادة الإنتاج ، يمكنك تشغيل حاوية عامل ميناء بـ centos:7 والقيام بذلك

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

هذا ممتع (حسب تعريفك للمتعة).

على صورة Docker centos:7 ، إذا قمت بتشغيل:

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 pip ، لذلك لست متأكدًا مما كسرته. ومع ذلك ، أدى هذا إلى فرز الأمور:

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

أتمنى أن يساعد ذلك شخص ما.

هذا وعملت في بيئتي (سينت أو إس 7 مع urllib3 ترقيتها من نقطة كما هو موضح أعلاهbmw .. بلادي "نقطة" القيادة كان عائدا أيضا أخطاء، إعادة تثبيت اللازمة لذلك):

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

مشرف Fedora / CentOS certbot هنا: يُرجى عدم تثبيت الوحدات النمطية على /usr/lib باستخدام pip . يتم تعديل بعض حزم CentOS بحيث لا تكرر الرمز الموجود أو لتقوية إعدادات الأمان. يجب أن تتأكد شركات حزم التوزيعات من تثبيت جميع الحزم المطلوبة.

يمكنك التحقق من التثبيت بحثًا عن حزم Python غير المُدارة باستخدام هذا الأمر:

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

يجب ألا تحصل على أي إخراج.

قد تكون إضافة yum repos الأخرى مشكلة أيضًا. يجب أن يعمل Fedora EPEL بنسبة 100٪ مع عمليات إعادة الشراء الأساسية من Red Hat / CentOS ولكن لا يمكننا أخذ أي عمليات إعادة شراء أخرى في الاعتبار.

إذا كان لديك فقط مستودعات CentOS الافتراضية (+ EPEL) ممكّنة ولا تزال تتعطل ، فيرجى إخبارنا بذلك. أفضل طريقة هي إنشاء مشكلة في Bugzilla ولكن الإشارة إلى @ هنا تعمل أيضًا (في الوقت الحالي - قد يتغير مشرفو certbot في Fedora / EPEL).

FelixSchwarz ، ماذا عن حزم إعادة الشراء CentOS SIG مثل centos-release-opstools ؟ عادةً ما أستخدم repos القياسي + epel ولكن fluentd متاح فقط في opstools (

في بعض الحالات ، انتهيت للتو من إنشاء بيئة افتراضية باستخدام python3 -mvenv /path/to/new/venv وتثبيت البرنامج المطلوب هناك (لنقل certbot + المدقق المطلوب لنظام أسماء النطاقات). لحسن الحظ أنه لا يلوث /usr/lib .

grossws يجب أن يعمل Fedora

لقد راجعت للتو عمليات إعادة الشراء الخاصة بـ

  • python2-msgpack: يحتوي EPEL 7 على 0.5.6-5.el7 ، أدوات التشغيل 0.4.6-3.el7 (غير مناسب لـ certbot ولكن لـ borgbackup الذي
  • طلبات python2: لدى EPEL 7 2.6.0-0.el7 ، أدوات التشغيل 2.19.1-4.el7
  • python2-urllib3: EPEL 7 1.10.2-7.el7 ( python-urllib3 ) ، أدوات التشغيل 1.21.1-1.el7
  • python-idna: RHEL Base تشحن 2.4-1.el7 ، opstools 2.5-1.el7 ( python2-idna )

هذا لا يعني أن الريبو centos-opstools لا يعمل مع حزم EPEL certbot ولكن هناك بعض التعارضات وهذا بالتأكيد تكوين لم يتم اختباره. يستبدل أيضًا centos-opstools حزمة في قاعدة RHEL مما يعني أنه يجب عليك توخي الحذر الشديد لأن هذا قد يؤدي أيضًا إلى كسر الكثير من الأشياء في التوزيعة الرئيسية.

tl ؛ dr: إذا كنت تستخدم حزم certbot الخاصة بـ EPEL ، فلا يجب عليك استخدام مستودعات yum / dnf الأخرى حيث من المحتمل أن تكون غير متوافقة. اطلب من مزود الريبو التوافق مع قاعدة RHEL و Fedora EPEL.

كما أنني وجدت أنه لم يكن من الصعب المساهمة في Fedora EPEL ، لذا إذا كنت تفتقد حزمة ، فيرجى التفكير في أن تصبح مشرفًا على الحزمة (ping me إذا كنت بحاجة إلى إرشادات).

أعتقد أن افتراض بعض أشكال الفساد صحيح. لم يتم تثبيت python2 pip ، لذلك لست متأكدًا مما كسرته. ومع ذلك ، أدى هذا إلى فرز الأمور:

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 التقييمات