我的固定版本为pyOpenSSL 19.0.0 突然出现了问题

4

我有一个在旧的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版本已经被更改,否则这种情况怎么会发生。因为我之前已经使用了该模块的固定版本一段时间了。请问有人能解释一下发生了什么吗?我希望将来可以避免类似的事情。谢谢。
4个回答

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

3
我们同时安装了pip和pip3。以下操作帮我解决了问题:
sudo apt update; pip install -U cryptography; sudo apt remove python3-openssl -y; sudo apt autoremove; pip3 install -U cryptography;

更新 pip3 所有过时的软件包破坏了 pip 和 pip3。apt remove && autoremove 解决了问题,当 pip 和 pip3 都出现问题时:在 WSL 上运行的 Ubuntu 20.04LTS。 - Gnudiff

1

我想我找到了问题所在。我的requirements.txt文件中没有加入cryptography模块,因此它被升级到最新版本,而pyOpenSSL仍然停留在requirements.txt文件中的旧版本。看起来应该有某种依赖关系阻止了这种情况发生,但现在我正在更新我的requirements.txt以包含所有内容。


0

有一个新的加密3.3.1版本可以解决这个问题


我已经安装了3.3.1版本,但是仍然出现相同的错误... - Nigu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接