AttributeError:模块“lib”没有属性“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:AnalyticsPuritan_GoogleAnalyticsGoogle_ConversionsmcfTest.py", line 1, in <module>
    from apiclient.discovery import build
  File "C:ProgramDataAnaconda3libsite-packagesapiclient__init__.py", line 3, in <module>
    from googleapiclient import channel, discovery, errors, http, mimeparse, model
  File "C:ProgramDataAnaconda3libsite-packagesgoogleapiclientdiscovery.py", line 57, in <module>
    from googleapiclient import _auth, mimeparse
  File "C:ProgramDataAnaconda3libsite-packagesgoogleapiclient_auth.py", line 34, in <module>
    import oauth2client.client
  File "C:ProgramDataAnaconda3libsite-packagesoauth2clientclient.py", line 45, in <module>
    from oauth2client import crypt
  File "C:ProgramDataAnaconda3libsite-packagesoauth2clientcrypt.py", line 45, in <module>
    from oauth2client import _openssl_crypt
  File "C:ProgramDataAnaconda3libsite-packagesoauth2client_openssl_crypt.py", line 16, in <module>
    from OpenSSL import crypto
  File "C:ProgramDataAnaconda3libsite-packagesOpenSSL__init__.py", line 8, in <module>
    from OpenSSL import crypto, SSL
  File "C:ProgramDataAnaconda3libsite-packagesOpenSSLcrypto.py", line 1517, in <module>
    class X509StoreFlags(object):
  File "C:ProgramDataAnaconda3libsite-packagesOpenSSLcrypto.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'
stack overflow AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
原文答案

答案:

作者头像

编辑 crypto.py 文件并通过使用 # 将其注释掉来删除有问题的行

然后升级最新版本的 PyOpenSSL。

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

现在您可以再次重新添加注释行,它应该可以工作

作者头像

在我的 ubuntu“20.04.5”上,我设法解决了错误:

CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECKr

通过重新安装以下软件包:

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 收到此错误消息并且无法再访问服务器。

希望它在一天对某人有所帮助。

作者头像

由于以上所有对我来说都失败了,我在这里使用了这个技巧: 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
作者头像

如果您的 pip 完全损坏,正如@sgdesmet 在评论中建议的那样,解决此问题的唯一选择是

“编辑 crypto.py 文件并用 # 注释掉有问题的行”

没有其他解决方案适用于我。

作者头像

对我来说,之前的答案对我没有帮助,因为我遇到了所有 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 获取 url)

  • python3 -m easy_install pyOpenSSL-22.1.0-py3-none-any.whl

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

作者头像

如果 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 ,但这没有用。唯一有帮助的是使用 rm -rf ...python-3.8.10/lib/python3.8/site-packages/OpenSSL 之类的 OpenSSL 模块删除整个文件夹,然后执行您需要的所有操作。

相关问题