Импорт SSL eventlet приводит к: ModuleNotFoundError: нет модуля с именем ‘OpenSSL.tsafe’

#python-3.x #pyopenssl #eventlet

#python-3.x #pyopenssl #eventlet

Вопрос:

Почему я получаю следующую ошибку импорта при попытке импортировать SSL-модуль eventlet:

 ModuleNotFoundError: No module named 'OpenSSL.tsafe'
 

Является ли OpenSSL eventlet несовместимым с последними версиями pyOpenSSL?

Этапы воспроизведения

Используя следующий Pipenv:

 [[source]]
name = "pypi"
url = "https://pypi.org/simple"

[packages]
pyOpenSSL = "*"
eventlet = "*"

[requires]
python_version = "3"
 

Создайте pipenv, используя этот файл:

 $ pipenv install
Creating a virtualenv for this project…
Pipfile: /tmp/Pipfile
Using /usr/local/bin/python3.8 (3.8.3) to create virtualenv…
...
Successfully created virtual environment! 
...
 

Теперь импортируйте eventlet.green.OpenSSL.SSL:

 $ pipenv run python
Python 3.8.3 (default, Jun 29 2020, 18:02:49) 
[GCC 8.3.1 20190311 (Red Hat 8.3.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from eventlet.green.OpenSSL import SSL
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/myuser/.local/share/virtualenvs/tmp-XVr6zr33/lib/python3.8/site-packages/eventlet/green/OpenSSL/__init__.py", line 3, in <module>
    from . import tsafe
  File "/home/myuser/.local/share/virtualenvs/tmp-XVr6zr33/lib/python3.8/site-packages/eventlet/green/OpenSSL/tsafe.py", line 1, in <module>
    from OpenSSL.tsafe import *
ModuleNotFoundError: No module named 'OpenSSL.tsafe'
>>> 
 

Комментарии:

1. Хммм. Копаясь в пакетах, я замечаю, что pyOpenSSL только что создал выпуск 20.0.0, который удалил tsafe.py . Может быть, eventlet нуждается в обновлении?

Ответ №1:

После некоторого изучения, похоже, что eventlet действительно в настоящее время не работает с последним пакетом pyOpenSSL 20.0.0, который был выпущен четыре дня назад на момент публикации этого сообщения. Я отправил проблему с eventlet:

https://github.com/eventlet/eventlet/issues/671

Пока eventlet не будет обновлен, нам придется привязать pyOpenSSL к предыдущей версии 19.1.0 (согласно Pip-файлу из вопроса):

 pyOpenSSL = "==19.1.0"