【问题标题】:my fixed pyOpenSSL version 19.0.0 suddenly broke我固定的 pyOpenSSL 版本 19.0.0 突然坏了
【发布时间】:2021-03-21 01:56:13
【问题描述】:

我有一个在旧的 CentOS 7 机器上运行的 Django 应用程序,为了在那里拥有自己的 python3 环境,我使用了 venv 和 pip。今天我重新构建了我的环境,突然,我有一个 ssl 相关的回溯。

    [root@miketug1 teleworker]# vpython manage.py showmigrations
Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/tug/env/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/usr/lib/tug/env/lib64/python3.6/site-packages/django/core/management/__init__.py", line 338, in execute
    django.setup()
  File "/usr/lib/tug/env/lib64/python3.6/site-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/lib/tug/env/lib64/python3.6/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models()
  File "/usr/lib/tug/env/lib64/python3.6/site-packages/django/apps/config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/etc/e-smith/web/django/teleworker/dashboard/models.py", line 9, in <module>
    import teleworker.lib.common as commonlib
  File "/etc/e-smith/web/django/teleworker/lib/common.py", line 35, in <module>
    import requests
  File "/usr/lib/tug/env/lib64/python3.6/site-packages/requests/__init__.py", line 95, in <module>
    from urllib3.contrib import pyopenssl
  File "/usr/lib/tug/env/lib64/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 46, in <module>
    import OpenSSL.SSL
  File "/usr/lib/tug/env/lib64/python3.6/site-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import crypto, SSL
  File "/usr/lib/tug/env/lib64/python3.6/site-packages/OpenSSL/SSL.py", line 664, in <module>
    _lib.Cryptography_HAS_TLSEXT_HOSTNAME, "SNI not available"
AttributeError: module 'lib' has no attribute 'Cryptography_HAS_TLSEXT_HOSTNAME'

我的模块版本在 requirements.txt 文件中设置,该文件没有更改。我正在使用 Python 3.6 运行 pyOpenSSL 19.0.0。我升级到 pyOpenSSL 20.0.0 并且问题消失了,但我很困惑,除非 PyPI 上的 19.0.0 版本被更改,否则这会如何发生,因为我已经使用这个模块的固定版本一段时间了。

谁能解释这里发生了什么?我想避免将来发生类似的事情。谢谢。

【问题讨论】:

    标签: python python-3.x pip python-venv


    【解决方案1】:

    这个问题的根本原因是 20 小时前发布的最新的 cryptography-3.3 包;不幸的是,pyopenssl-19 有一个奇怪的要求(密码学 >=2.3),因此 pip 安装会自动将密码学升级到 3.3。

    【讨论】:

      【解决方案2】:

      我想我找到了。我的 requirements.txt 中没有密码学模块,所以它升级到了最新版本,而没有升级我的 requirements.txt 文件中的 pyOpenSSL。似乎某种依赖性应该阻止这种情况发生,但我正在更新我的 requirements.txt 以包含所有内容。

      【讨论】:

        【解决方案3】:

        我们同时安装了 pip 和 pip3。因此,以下顺序对我来说是固定的:

        sudo apt 更新; pip install -U 密码学; sudo apt remove python3-openssl -y; sudo apt 自动删除; pip3 install -U 密码学;

        【讨论】:

          【解决方案4】:

          有一个新的密码学 3.3.1 可以解决这个问题

          【讨论】:

          • 我确实安装了 3.3.1 版,但同样的错误仍然存​​在......
          猜你喜欢
          • 2016-05-19
          • 1970-01-01
          • 2013-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-18
          • 2014-02-01
          相关资源
          最近更新 更多