Разочарование в модуле pyOpenSSL не подтверждается

Среда: OS X BigSur 11.2.2; Макбук Про Интел

Я пытаюсь заставить pyOpenSSL работать в среде Python3. Я работаю над переходом от использования Py2 к Py3. Я мог бы легко сделать это в Python2; но мне действительно нужно выйти из Python2 по понятным причинам.

В моем скрипте Python у меня просто есть команда: import pyOpenSSL. Я также пробовал просто импортировать OpenSSL и импортировать криптографию, все они также производят аналогичные ошибки No module named.... Независимо от синтаксиса, правописания или регистра ничего не работает.

Во время всех приведенных ниже попыток установка прошла успешно; и я проверил список pip3.

Я пытался:

  • установка Python напрямую в систему - не пойдет.
  • установил pyenv и установил Python 3.8.7 и использовал pip3 для установки pyOpenSSL - не пошел.
  • установил virtualenvwrapper и создал виртуальную среду, установил туда, все равно не идет.

Я даже проверил в Python, что модуль был установлен с использованием следующего:

import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
   for i in installed_packages])
print(installed_packages_list)
['appdirs==1.4.4', 'cffi==1.14.5', 'cryptography==3.4.6', 'distlib==0.3.1', 'filelock==3.0.12', 'pbr==5.5.1', 'pip==21.0.1', 'pycparser==2.20', 'pyopenssl==19.1.0', 'setuptools==49.2.1', 'six==1.15.0', 'stevedore==3.3.0', 'virtualenv-clone==0.5.4', 'virtualenv==20.4.2', 'virtualenvwrapper==4.8.4']

Даже при использовании не-pip показывает, что как минимум установлен openSSL.

>>> help("modules")

Please wait a moment while I gather a list of all available modules...

/Users/jewettg/.pyenv/versions/3.8.7/lib/python3.8/site-packages/setuptools/distutils_patch.py:25: UserWarning: Distutils was imported before Setuptools. This usage is discouraged and may exhibit undesirable behaviors or errors. Please use Setuptools' objects directly or at least import Setuptools first.
  warnings.warn(
OpenSSL             _thread             functools           resource
__future__          _threading_local    gc                  rlcompleter
_abc                _tkinter            genericpath         runpy
_ast                _tracemalloc        getopt              sched
_asyncio            _uuid               getpass             secrets
_bisect             _warnings           gettext             select
_blake2             _weakref            glob                selectors
_bootlocale         _weakrefset         grp                 setuptools
_bz2                _xxsubinterpreters  gzip                shelve
_cffi_backend       _xxtestfuzz         hashlib             shlex
_codecs             abc                 heapq               shutil

Я понятия не имею, что я делаю неправильно! ПОМОЩЬ!?


person jewettg    schedule 05.03.2021    source источник
comment
Также обратите внимание; что я пробовал более старые версии PyOpenSSL (19.1.10) и самую последнюю (20.0.1).   -  person jewettg    schedule 05.03.2021
comment
Откуда вы получаете эти ошибки при попытке запустить свой фрагмент кода? Если вы используете python3 xxx.py для запуска своих программ, я предлагаю устанавливать модули с помощью python3 -m pip install packagename, чтобы убедиться, что модули установлены для любой версии Python, которую вы активно используете.   -  person Jason Rebelo Neves    schedule 05.03.2021
comment
Спасибо @JasonRebeloNeves - я так и сделал. У меня также есть локальный псевдоним, который указывает python на python3. Поэтому он устанавливается в среде python3.   -  person jewettg    schedule 05.03.2021
comment
Какая точная ошибка возникает при импорте? Можете ли вы вставить это здесь? Если нет, то можете хотя бы назвать модули, которые он не находит?   -  person Matt Messersmith    schedule 05.03.2021
comment
@MattMessersmith Прошу прощения, это модуль pyOpenSSL. Трассировка (последний последний вызов): Файл ./f5_cert_create.py, строка 96, в ‹module› import OpenSSL ModuleNotFoundError: Нет модуля с именем «OpenSSL». Как упоминалось выше, я пробовал разные имена, и все они дают одинаковый результат, даже при проверке именованного модуля в ошибке присутствует.   -  person jewettg    schedule 05.03.2021
comment
@MattMessersmith: ModuleNotFoundError: нет модуля с именем «OpenSSL»; ModuleNotFoundError: нет модуля с именем «pyOpenSSL»; ModuleNotFoundError: нет модуля с именем «pyopenssl»; ModuleNotFoundError: нет модуля с именем «криптография»   -  person jewettg    schedule 05.03.2021


Ответы (1)


Не могу рассказать про pyenv или другие менеджеры, но conda меня редко подводит. Я проверил, что могу установить эту библиотеку из чистой среды conda с python3.8 и импортировать ее:

(base) $ conda create python=3.8 -n pyssl
...
(base) $ conda activate pyssl
(pyssl) $ pip install pyopenssl
...
Successfully installed cffi-1.14.5 cryptography-3.4.6 pycparser-2.20 pyopenssl-20.0.1 six-1.15.0
(pyssl) $ python
Python 3.8.8 (default, Feb 24 2021, 21:46:12)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import OpenSSL
>>>

Так что вы почти наверняка захотите сделать import OpenSSL. Я на Windows, но использую WSL2. Однако все это не должно иметь значения.

Обычно такие проблемы возникают из-за того, что вы установили библиотеку в один интерпретатор Python, но случайно вызываете другой интерпретатор (где вы не устанавливали библиотеку) при фактическом запуске.

person Matt Messersmith    schedule 05.03.2021
comment
Я сейчас пробую Conda; обновит / опубликует мой опыт и сообщит вам. pyenv недоступен на RHEL; где я пытаюсь это сейчас. Так что все мои первоначальные проблемы были на OS X; поэтому я пытаюсь воспроизвести на RHEL. - person jewettg; 06.03.2021
comment
Я просто сбит с толку. Я не могу заставить его работать с openSSL. Я могу заставить его работать с mysql.connector, запросами и т. д., все они работают. Я создал среду conda, активировал ее, убедился, что pyopenssl не установлен, установил ее и все еще не работает. Я тогда проверил, что для хихиканья mysql.connector и запросы установлены, и код не будет работать без их установки, но установил, код заработал, разрешил импорт. - person jewettg; 06.03.2021
comment
Форматирование воняет, но чтобы воспроизвести то, что вы сделали выше: я составил список пипсов и убедился, что pyOpenSSL 20.0.1 установлен. Затем я запустил Python, Python 3.6.13 | Anaconda, Inc.| (по умолчанию, 23 февраля 2021 г., 21:15:04) [GCC 7.3.0] в Linux. Затем я приступил к импорту openssl и импорту pyopenssl и Traceback (последний последний вызов): Файл ‹stdin›, строка 1, в ‹module› ModuleNotFoundError: Нет модуля с именем 'openssl' Traceback (последний вызов последний): Файл ‹stdin› , строка 1, в модуле ‹module› ModuleNotFoundError: нет модуля с именем «pyopenssl» - person jewettg; 06.03.2021
comment
@jewettg просто примечание, что дело имеет значение, нужно будет сделать import OpenSSL - person Matt Messersmith; 06.03.2021
comment
@jewettg И если вы создали env conda, как я сделал выше, вы вызываете неправильный интерпретатор. Вы сделали python=3.6 вместо python=3.8? - person Matt Messersmith; 06.03.2021
comment
Итак, судя по всему, регистр имеет значение, и вы не можете полагаться на то, что имя модуля соответствует тому, что вы используете для импорта. ?!?! Если вы устанавливаете pyopenssl, вам необходимо импортировать OpenSSL (с учетом регистра). Как ты разбираешься в этом? Как запутанно. К вашему сведению: это работало в Python 3.6 и 3.8; пока я обращал внимание на чувствительность к регистру! - person jewettg; 08.03.2021
comment
@jewettg понял это, прочитав документы. Я соглашусь с тем, что то, что они делают, не соответствует стандарту PEP8, и нарушение нормы вызывает путаницу такого рода. Тем не менее, я бы предположил, что модуль очень старый и, вероятно, порт python2. Может быть, мы можем дать им некоторую слабину ;). В конце концов, это бесплатно. - person Matt Messersmith; 08.03.2021