AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
最近,由于可执行文件的损坏,我不得不重新安装python。这使得我们的一个Python脚本出现了以下错误。
AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
导致它爆炸的那行代码是:
from apiclient.discovery import build
我试着用pip卸载和pip升级google-api-python-client,但我似乎找不到关于这个特殊错误的任何信息。
我正试图通过API调用将谷歌分析信息拉下来,这很有价值。
以下是命令提示符下的错误输出:
File "C:\Analytics\Puritan_GoogleAnalytics\Google_Conversions\mcfTest.py", line 1, in <module>
from apiclient.discovery import build
File "C:\ProgramData\Anaconda3\lib\site-packages\apiclient\__init__.py", line 3, in <module>
from googleapiclient import channel, discovery, errors, http, mimeparse, model
File "C:\ProgramData\Anaconda3\lib\site-packages\googleapiclient\discovery.py", line 57, in <module>
from googleapiclient import _auth, mimeparse
File "C:\ProgramData\Anaconda3\lib\site-packages\googleapiclient\_auth.py", line 34, in <module>
import oauth2client.client
File "C:\ProgramData\Anaconda3\lib\site-packages\oauth2client\client.py", line 45, in <module>
from oauth2client import crypt
File "C:\ProgramData\Anaconda3\lib\site-packages\oauth2client\crypt.py", line 45, in <module>
from oauth2client import _openssl_crypt
File "C:\ProgramData\Anaconda3\lib\site-packages\oauth2client\_openssl_crypt.py", line 16, in <module>
from OpenSSL import crypto
File "C:\ProgramData\Anaconda3\lib\site-packages\OpenSSL\__init__.py", line 8, in <module>
from OpenSSL import crypto, SSL
File "C:\ProgramData\Anaconda3\lib\site-packages\OpenSSL\crypto.py", line 1517, in <module>
class X509StoreFlags(object):
File "C:\ProgramData\Anaconda3\lib\site-packages\OpenSSL\crypto.py", line 1537, in X509StoreFlags
CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
编辑crypto.py文件,用#号注释去掉违规的那一行。
然后再升级最新版本的PyOpenSSL。
pip install pip --upgrade
pip install pyopenssl --upgrade
现在你可以重新添加注释的行,它应该可以工作了。
rm -rf <path_to_lib_python3.7>/site-packages/OpenSSL
,然后再做pip install -U pyopenssl
。
- user13451415 2022-11-16
由于上述所有方法对我来说都失败了,我使用了这里的技巧。https://askubuntu.com/a/1433089/497392
sudo apt remove python3-pip
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
然后在重启后。
pip install pyopenssl --upgrade
pip3 安装 pyOpenSSL --upgrade
我的所有问题都得到了解决。
在我的ubuntu "20.04.5"上,我设法解决了这个错误。
CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK\r
通过重新安装以下软件包,可以实现。
apt-get --reinstall install python-apt
apt-get --reinstall install apt-transport-https
apt-get install build-essential libssl-dev libffi-dev python-dev
我没有使用pip,因为我在使用ansible playbook时收到了这个错误信息,而且无法再连接到服务器。
希望它能对某人有所帮助。
对我来说,前面的答案不能帮助我,因为我在所有的pip命令中都遇到了这个问题,甚至pip3 -V
。但我通过以下方式解决了这个问题。
wget https://files.pythonhosted.org/packages/00/3f/ea5cfb789dddb327e6d2cf9377c36d9d8607af85530af0e7001165587ae7/pyOpenSSL-22.1.0-py3-none-any.whl
(如果你需要最新的版本,可以从https://pypi.org/project/pyOpenSSL/#files获取网址)python3 -m easy_install pyOpenSSL-22.1.0-py3-none-any.whl
pip3 --version
也以同样的方式被stacktrace输出破坏。我在~/.local/lib/python3.8/site-packages/localstack/utils/crypto.py
处看到了"令人反感"的crypto.py
,但不认为注释掉一行是一个合适的解决方案。这个解决方案似乎是实际的修复方法。
- Steve Goossens 2022-11-08
如果你的pip完全坏了,就像@sgdesmet在评论中提议的那样,解决这个问题的唯一选择是
"编辑crypto.py文件,用#"注释去掉违规的那一行。
其他的解决方案对我来说都是无效的。
如果pip
/pip3
完全坏了,而且其他选项都不起作用(如@DarkSkull所描述的),那么crypto.py
文件中导致问题的那一行必须被删除或注释掉。
这里有一个自动化的方法。
python_openssl_crypto_file="/usr/lib/python3/dist-packages/OpenSSL/crypto.py"
search_term="CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK"
cb_issuer_check_line_number="$(awk "/$search_term/ {print FNR}" $python_openssl_crypto_file)"
sed -i "${cb_issuer_check_line_number}s/.*/ # $search_term/" $python_openssl_crypto_file
我试过升级pip并从whl文件中安装另一个版本的pyOpenSSL
,但这并不奏效。唯一有帮助的是删除了带有OpenSSL模块的整个文件夹,如rm -rf ...python-3.8.10/lib/python3.8/site-packages/OpenSSL
,然后做你需要的所有事情。
感谢上面的答案,我能够解决同样的问题。我使用pipenv来管理我的环境。这个问题是在升级我的密码学模块后出现的。
修复方法(对我来说):
pipenv update pyOpenSSL
下面的命令对我来说是有效的...
sudo pip3 install pyopenssl
sudo pip3 install pyopenssl --upgrade