How to fix ImportError: No module named cryptography?

How to fix ImportError: No module named cryptography?

我想通过 certbot 自动续订证书,但无法正常工作,出现错误 "ImportError: No module named cryptography"

# ./certbot-auto --dry-运行

错误:无法获取 /opt/eff 的当前安装版本。org/certbot/venv/bin/letsencrypt: 追溯(最近一次通话): 文件“/opt/eff.org/certbot/venv/bin/letsencrypt”,第 7 行,位于 来自 certbot.main 导入主要 文件“/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/certbot/main.py”,第 10 行,位于 将 josepy 导入为 jose 文件“/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/init.py”,第 41 行,在 来自 josepy.interfaces 导入 JSONDeSerializable 文件“/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/interfaces.py”,第 7 行,位于 来自 josepy 导入错误,util 文件“/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/util.py”,第 7 行,位于 导入 OpenSSL 文件“/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/init.py”,第 8 行,在 从 OpenSSL 导入加密,SSL 文件“/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/crypto.py”,第 12 行,位于 从密码学导入 x509 ImportError: 没有名为 cryptography 的模块

我尝试安装密码系统,得到了这个结果

sudo /opt/eff.org/certbot/venv/bin/pip 安装加密

您使用的是 pip 版本 9.0.1,但是版本 19.2.3 可用。 您应该考虑通过 'pip install --upgrade pip' 命令升级。

然后我尝试了这个命令 pip 安装 --upgrade pip

弃用:Python 2.7 将于 2020 年 1 月 1 日结束其生命周期。请升级您的 Python,因为 Python 2.7 将在该日期之后停止维护。 pip 的未来版本将放弃对 Python 2.7 的支持。有关 Python 2 pip 支持的更多详细信息,请访问 https://pip.pypa.io/en/latest/development/release-process/#python-2-support 要求已经是最新的:pip in /usr/lib/python2.7/dist-packages/pip-19.2.3-py2.7.egg (19.2.3)

如何安装密码?

成功安装我在 运行 certbot-auto 升级到新版本后收到了完全相同的错误消息。

以下是我解决此问题的方法:

pip install cryptography 
cd /opt/eff.org/certbot/venv/lib64/python2.7 
mv site-packages site-packages.sav 
ln -s dist-packages/ site-packages 

这是因为 letsencrypt 的自定义版本 python 正在寻找 site-packages 子文件夹下的包,而它是空的在我的例子中,包在 dist-packages 子文件夹下。

注意:如果看到cryptography安装成功则不需要运行'pip install --upgrade pip'命令,可以忽略警告信息。

尝试在 AWS EC2 实例上更新我的 certbot 证书时,我也 运行 遇到了同样的问题。我开始安装密码学,然后让虚拟环境在正确的目录中查找它,然后找不到另一个包,github 的所有回复都是他们不支持这些AWS 实例。 Soooooo,我采用了这个简单的想法,而且效果很好:

cd /opt
sudo rm -R eff.org
cd ~
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto renew --debug

也就是我删除了旧的安装,然后用“更新”命令重新安装了。工作完美。您的密钥未存储在您删除的目录中。