AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'

回答 10 浏览 3.5万 2022-09-23

最近,由于可执行文件的损坏,我不得不重新安装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'
Doug Coats 提问于2022-09-23
您是否遵循了Google analytics python quickstart?对于服务账户?或安装应用程序的QuickStart pythonDaImTo 2022-09-23
@Daimto 事实上我做了。我在这里发帖是想看看是否有人知道我可以验证哪些软件包,如果有版本差异的话,我至少认为这是基于我的小型研究的问题,因为这发生了。Doug Coats 2022-09-23
在我看来,X509意味着你仍然在为服务账户使用p12证书,而不是为服务账户使用json密钥文件。如果这是真的。那么我建议你修改代码,使用json密钥文件而不是p12文件。DaImTo 2022-09-23
@Daimto 我正在使用json文件。经过几次试验和错误,我确实发现错误是由于密码学版本冲突造成的。我能够让它启动和运行。Woohoo!Doug Coats 2022-09-23
10 个回答
#1楼 已采纳
得票数 58

编辑crypto.py文件,用#号注释去掉违规的那一行。

然后再升级最新版本的PyOpenSSL。

pip install pip --upgrade
pip install pyopenssl --upgrade

现在你可以重新添加注释的行,它应该可以工作了。

Robin Sving 提问于2022-10-03
如果你像我一样,一定不要读到这一部分:"编辑 crypto.py 文件并通过用 # 注释掉它来删除有问题的行"sgdesmet 2022-10-21
如果使用Python3和Rpi4,我是否应该使用Pip3呢?Damandroid 2022-10-21
对不起,这么久才给你应有的反馈,谢谢!Doug Coats 2022-11-03
@JamesDraper 只需检查堆栈跟踪,你应该看到crypto.py的路径。Robin Sving 2022-11-11
我发现最好的办法是完全删除OpenSSL软件包。rm -rf <path_to_lib_python3.7>/site-packages/OpenSSL,然后再做pip install -U pyopenssluser13451415 2022-11-16
#2楼
得票数 13

由于上述所有方法对我来说都失败了,我使用了这里的技巧。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
Kjeld Flarup 提问于2022-11-15
登录只是为了给你投票!谢谢Jesse Reich 2022-11-17
这也是唯一对我起作用的东西;Ubuntu 20elkd 2022-12-20
警告:以'root'用户身份运行pip会导致权限被破坏,并与系统软件包管理器发生冲突。建议使用虚拟环境来代替。pip.pypa.io/warnings/venvRebroad 2022-12-31
#3楼
得票数 6

pip3 安装 pyOpenSSL --upgrade

我的所有问题都得到了解决。

hightest 提问于2022-12-12
#4楼
得票数 5

在我的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时收到了这个错误信息,而且无法再连接到服务器。

希望它能对某人有所帮助。

Orsius 提问于2022-10-12
重新安装后,我需要按照@Robin Sving的回答升级pyOpenSSL和密码学,结果成功了。Liz 2022-10-17
这对Python2来说更有可能。Y Y 2022-12-22
python-dev不是一个软件包。Rebroad 2022-12-31
#5楼
得票数 2

对我来说,前面的答案不能帮助我,因为我在所有的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

谢谢https://askubuntu.com/a/1429674

yxzlwz 提问于2022-10-29
yxzlwz 修改于2022-10-29
请尝试StackOverflow的"sort by"功能,并重新考虑"以上"的措辞。Yunnosch 2022-10-29
其他解决方案命令没有解决这个问题,而且pip3 --version也以同样的方式被stacktrace输出破坏。我在~/.local/lib/python3.8/site-packages/localstack/utils/crypto.py处看到了"令人反感"的crypto.py,但不认为注释掉一行是一个合适的解决方案。这个解决方案似乎是实际的修复方法。Steve Goossens 2022-11-08
有趣的技巧,然而easy_install并没有安装在我的系统上 :-(Kjeld Flarup 2022-11-15
#6楼
得票数 0

如果你的pip完全坏了,就像@sgdesmet在评论中提议的那样,解决这个问题的唯一选择是

"编辑crypto.py文件,用#"注释去掉违规的那一行。

其他的解决方案对我来说都是无效的。

DarkSkull 提问于2022-10-23
#7楼
得票数 0

如果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
miu 提问于2022-11-12
#8楼
得票数 0

我试过升级pip并从whl文件中安装另一个版本的pyOpenSSL,但这并不奏效。唯一有帮助的是删除了带有OpenSSL模块的整个文件夹,如rm -rf ...python-3.8.10/lib/python3.8/site-packages/OpenSSL,然后做你需要的所有事情。

Alexandr 提问于2022-11-16
Alexandr 修改于2022-11-16
#9楼
得票数 0

感谢上面的答案,我能够解决同样的问题。我使用pipenv来管理我的环境。这个问题是在升级我的密码学模块后出现的。

修复方法(对我来说):

pipenv update pyOpenSSL
JDogMcSteezy 提问于2022-12-16
JDogMcSteezy 修改于2022-12-16
是的,伙计,这很好。Doug Coats 2022-12-16
#10楼
得票数 0

下面的命令对我来说是有效的...

sudo pip3 install pyopenssl

sudo pip3 install pyopenssl --upgrade

Nishant Kabariya 提问于2023-01-09
Nishant Kabariya 修改于2023-01-09
您的答案可以通过其他支持信息得到改进。请编辑以添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到更多关于如何写出好的答案的信息。Community 2023-01-09