CentOS Linux 版本 7.3.1611
操作系统打包管理器
回溯(最近一次调用最后一次):
文件“/bin/certbot”,第 7 行,在
从 certbot.main 导入主
文件“/usr/lib/python2.7/site-packages/certbot/main.py”,第 17 行,在
从 certbot 导入客户端
文件“/usr/lib/python2.7/site-packages/certbot/client.py”,第 10 行,在
从 acme 导入客户端为 acme_client
文件“/usr/lib/python2.7/site-packages/acme/client.py”,第 31 行,在
requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3() # 类型:忽略
文件“/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py”,第112行,inject_into_urllib3
_validate_dependencies_met()
文件“/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py”,第 147 行,在 _validate_dependencies_met
raise ImportError("'pyOpenSSL' 模块缺少所需的功能。"
导入错误:“pyOpenSSL”模块缺少所需的功能。 尝试升级到 v0.14 或更新版本。
它应该成功更新而不是错误。
/var/log/letsencrypt
。 随意编辑您认为合适的域、电子邮件和 IP 地址。没有日志条目。 我已经删除了 pyopenssl 并重新安装了它。
名称:pyOpenSSL
版本:16.2.0
总结:围绕 OpenSSL 库的 Python 包装器模块
主页: https :
添加一名作者
作者邮箱: [email protected]
许可证:Apache 许可证,版本 2.0
位置:/usr/lib64/python2.7/site-packages
要求:六、密码学
但错误仍然存在。 任何的想法 ?
也许有多个 pyOpenSSL 版本,所以 urllib3 会被混淆。 在/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py中,应该有这样的几行:
# pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
# attribute is only present on those versions.
from OpenSSL.crypto import X509
x509 = X509()
if getattr(x509, "_x509", None) is None:
raise ImportError("'pyOpenSSL' module missing required functionality. "
"Try upgrading to v0.14 or newer.")
你能添加一些调试代码看看输出是什么吗?
# pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
# attribute is only present on those versions.
import OpenSSL.crypto
print(OpenSSL.crypto)
from OpenSSL.crypto import X509
x509 = X509()
if getattr(x509, "_x509", None) is None:
raise ImportError("'pyOpenSSL' module missing required functionality. "
"Try upgrading to v0.14 or newer.")
请注意 Python 不喜欢制表符。 始终插入空格以进行标识。 此外,您需要 root 来修改此文件。
这是输出:
回溯(最近一次调用最后一次):
文件“/bin/certbot”,第 7 行,在
从 certbot.main 导入主
文件“/usr/lib/python2.7/site-packages/certbot/main.py”,第 17 行,在
从 certbot 导入客户端
文件“/usr/lib/python2.7/site-packages/certbot/client.py”,第 10 行,在
从 acme 导入客户端为 acme_client
文件“/usr/lib/python2.7/site-packages/acme/client.py”,第 31 行,在
requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3() # 类型:忽略
文件“/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py”,第112行,inject_into_urllib3
_validate_dependencies_met()
文件“/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py”,第 149 行,在 _validate_dependencies_met
raise ImportError("'pyOpenSSL' 模块缺少所需的功能。"
导入错误:“pyOpenSSL”模块缺少所需的功能。 尝试升级到 v0.14 或更新版本。
/usr/lib64/python2.7/site-packages/OpenSSL/crypto.so
此路径类似于早期的 pyOpenSSL 包。 您可以通过 yum 删除 pyOpenSSL 并重试吗?
我在centos7上遇到了同样的问题。 删除 pyOpenSSL.x86_64 0:0.13.1-3.el7 没有帮助,因为yum install certbot
会重新安装它。
但是我找到了一个解决 RPM 损坏的方法:
yum remove pyOpenSSL.x86_64
cd
mkdir virtualenv
cd virtualenv/
virtualenv --no-site-packages -p /usr/bin/python2.7 certbot
. ~/virtualenv/certbot/bin/activate
pip import six packaging appdirs
pip install setuptools --upgrade pip install certbot
certbot help
新安装的 centos 也有同样的问题。
rpm --query centos-release # centos-release-7-3.1611.el7.centos.x86_64
wget ftp://ftp.muug.mb.ca/mirror/centos/7.3.1611/cloud/x86_64/openstack-mitaka/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo yum install certbot
certbot renew # OK
我认为这更像是 CentOS 的问题,而不是 certbot 的问题。 有人可以向 CentOS 报告他们的 pyOpenSSL 太旧了吗?
即使升级到 pyOpenSSL 16.something 后,问题仍然存在于我的系统上
最近在我的 CentOS 7 机器上发生了同样的问题。
唯一的解决方法是pip install pyOpenSSL=0.13.1
最近两个月,它失败了。
而我刚才又试了一次,又失败了。
输出:
>> sudo certbot certonly --standalone -d mydomain.com
<< Traceback (most recent call last):
File "/bin/certbot", line 9, in <module>
load_entry_point('certbot==0.12.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 10, in <module>
from acme import client as acme_client
File "/usr/lib/python2.7/site-packages/acme/client.py", line 31, in <module>
requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()
File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 112, in inject_into_urllib3
_validate_dependencies_met()
File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 147, in _validate_dependencies_met
raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
然后我试试这个,它有效:
答案链接: https :
仅供参考……在 CentOS 上通过 pip 更新 pyOpenSSL 通常是不安全的,因为这样可能会破坏 yum。
您使用的是哪个 certbot 软件包? 如果您可以从 epel-testing 安装 0.13.0,并始终确保您的系统具有完整的 yum 更新,我将不胜感激。
您可能需要使用 yum 重新安装 pyOpenSSL 来修复您的系统(使用 rpm -qV pyOpenSSL 检查它的状态)。
带有该软件包的 systemd 更新计时器存在问题,这就是为什么我没有将其稳定,但仅执行 certbot 请求和手动 certbot 更新即可。
0.14.0 版本也即将发布……我只是在 AWS 中测试了它。
我很好奇 - 原作者通过包管理器安装了它,那么我们将在哪里为 pip 固定一个版本?
人们仍然有这个问题吗? 如果是这样,您使用的是什么安装方法?
您可能想尝试此 Dockerfile 中描述的方法,该方法对我有用:
https://github.com/identinetics/docker-nginx/blob/master/Dockerfile#L65
在全新安装和更新的 centOS 7.3 上仍然存在问题。
通过安装更新的 pyOpenSSL rpm 解决了这个问题(pyOpenSSL-0.14-3.fc222 似乎足够了,而 pyOpenSSL-16.2.0-1.fc25 不起作用),但是如何确保它没有破坏其他任何东西?!
https://www.rpmfind.net/linux/rpm2html/search.php?query=pyOpenSSL
谢谢
@tisc0我对您如何安装和运行它以解决该问题的更多细节非常感兴趣。
当我构建 centos7 certbot 软件包时,我在 AWS 中对它们进行了测试,没有任何问题——当然不是你所描述的或这个问题所描述的。
直接在centos7 上安装fedora rpm 是一个糟糕的主意——尤其是像pyOpenSSL 这样的核心包。
嗨,霍加斯,
抱歉缺少细节,这几天有点忙:)
简而言之 :
[ root@c7-dse ~]# echo N | yum 删除 python-urllib3 | awk '{print $1}'
(……)
依赖关系
==============
包裹
删除:
蟒蛇-urllib3
删除
证书机器人
ipa客户端
蟒蛇请求
python2-acme
python2-certbot
python2-ipaclient
python2-ipalib
欢迎任何解释为什么重新安装某些软件包使其工作的想法:)
@tisc0感谢您提供更多详细信息
强制安装/删除软件包通常会导致问题 - 系统库的 pip 升级也是如此。
只获取 Fedora 软件包用于 CentOS 而不从 src.rpm 进行软件包本身的重建很少是一个好主意
通过重新安装软件包(而不是删除和安装具有依赖性问题的 yum 重新安装可以是一个救星),原始文件被验证到位。
我很高兴听到重新安装 CentOS 软件包对您有用:)
由于@tisc0现在似乎有一个工作设置,我将关闭这个问题。 如果有人仍然遇到问题,请提交一个新问题,因为该线程变得非常拥挤。
对于 CentOS7,只需执行“mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL”,这对我来说就像一个魅力!!!
肮脏的黑客:1st_place_medal: ;)
刚刚遇到了同样的问题,那是因为pip install -U
确实覆盖了从 RPM 安装的 python 模块。
为了解决这个问题,我做了以下事情:
File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 147, in _validate_dependencies_met
raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
[root<strong i="12">@kolla</strong> ~]# rpm -qf /usr/lib64/python2.7/site-packages/OpenSSL/
pyOpenSSL-0.13.1-3.el7.x86_64
[root<strong i="13">@kolla</strong> ~]# rpm -qf /usr/lib/python2.7/site-packages/urllib3
python-urllib3-1.10.2-2.el7_1.noarch
[root<strong i="14">@kolla</strong> ~]# rpm --nodeps -e python-urllib3
[root<strong i="15">@kolla</strong> ~]# rm -rf /usr/lib/python2.7/site-packages/urllib3/
[root<strong i="16">@kolla</strong> ~]# yum -y install python-urllib3
File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 90, in <module>
from urllib3.exceptions import DependencyWarning
ImportError: cannot import name DependencyWarning
[root<strong i="20">@kolla</strong> ~]# rpm -qf /usr/lib/python2.7/site-packages/requests
python-requests-2.6.0-1.el7_1.noarch
[root<strong i="24">@kolla</strong> ~]# rpm --nodeps -e python-requests
[root<strong i="25">@kolla</strong> ~]# rm -rf /usr/lib/python2.7/site-packages/requests
[root<strong i="26">@kolla</strong> ~]# yum -y install python-requests
再次遇到同样的问题,这次使用docker容器要容易得多:)
alias certbot='docker run --rm -ti -v /etc/letsencrypt:/etc/letsencrypt -p 80:80 certbot/certbot:v0.21.1'
@cnritng它也适用于我
仍然有此问题的任何人,请尝试以下操作:
rpm --query centos-release # centos-release-7-3.1611.el7.centos.x86_64
wget ftp://ftp.muug.ca/mirror/centos/7/cloud/x86_64/openstack-newton/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo yum install certbot
certbot renew # OK
来自@sulliwane 。 请注意, ftp://ftp.muug.ca/mirror/...
地址已更改。
谢谢@JellyBool
伙计们,不要通过pip
混合yum
已安装的软件包。 正确的修复包括删除 pip 包并安装yum
。 我在这里概述了它。
您不需要在 CentOS 7 上使用更新的 pyOpenSSL 来运行 certbot! 并不是说依赖第三个包最终不会给你带来任何好处:)
pip uninstall requests
yum reinstall python-requests
pip uninstall six
yum reinstall python-six
pip uninstall urllib3
yum reinstall python-urllib3
@dvershinin的上述步骤对我
还可以处理@dvershinin发布的内容。 只需将最后一行从“yum restart python-urllib3”更改为“yum install python-urllib3”
对于 CentOS7,只需执行“mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL”,这对我来说就像一个魅力!!!
*nix 之类的系统总是有类似的问题:文件依赖被破坏。
https://github.com/certbot/certbot/issues/4514#issuecomment -375741595
为我工作
伙计们,不要通过
pip
混合yum
已安装的软件包。 正确的修复包括删除 pip 包并安装yum
。 我在这里概述了它。您不需要在 CentOS 7 上使用更新的 pyOpenSSL 来运行 certbot! 并不是说依赖第三个包最终不会给你带来任何好处:)
pip uninstall requests yum reinstall python-requests pip uninstall six yum reinstall python-six pip uninstall urllib3 yum reinstall python-urllib3
谢谢! 这是工作!
@dvershinin fix 目前对我不起作用 - 在按照他在 Centos 7 上描述的步骤之后,我收到以下错误:
VersionConflict: (urllib3 1.10.2 (/usr/lib/python2.7/site-packages), Requirement.parse('urllib3>=1.20,<1.26'))
@keir-lavelle 我的修复只是尝试在系统受到严重损坏后通过在root
用户下使用pip
将系统恢复到原始状态(那里有很多教程让人们这样做,没有考虑到它永远不应该在 CentOS/RHEL 系统中完成的事实!)
因此,如果您对修复它感到冒险,您可以按照我提供的链接尝试通过删除所有Python 包来进一步修复它(请注意, yum
也是基于 Python 的),这是一个更危险的企业. (因为你可以打破更多)。
certbot
工作的某个快照/备份中恢复您的服务器,那么您应该没问题yum
进入工作状态)。当然,再次记住它会有所帮助:不要在root
下使用pip
或python
安装。 这就是它首先破裂的方式。 如果它没有发生 - 它不会破裂。
感谢您花时间解释,我现在只是在测试东西,所以服务器是一次性的,所以如果它坏了也没什么大不了的,但感谢这些信息
最有用的评论
伙计们,不要通过
pip
混合yum
已安装的软件包。 正确的修复包括删除 pip 包并安装yum
。 我在这里概述了它。您不需要在 CentOS 7 上使用更新的 pyOpenSSL 来运行 certbot! 并不是说依赖第三个包最终不会给你带来任何好处:)