Python AttributeError: объект "module" не имеет атрибута "SSL ST INIT"

мой скрипт Python терпит неудачу с:

Traceback (most recent call last):
  File "./inspect_sheet.py", line 21, in <module>
    main()
  File "./inspect_sheet.py", line 12, in main
    workbook_name=workbook_name,
  File "./google_sheets.py", line 56, in __init__
    self.login()
  File "./google_sheets.py", line 46, in login
    self.client = gspread.authorize(credentials)
  File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 335, in authorize
    client.login()
  File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 98, in login
    self.auth.refresh(http)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 598, in refresh
    self._refresh(http.request)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 769, in _refresh
    self._do_refresh_request(http_request)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 795, in _do_refresh_request
    body = self._generate_refresh_request_body()
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 1425, in _generate_refresh_request_body
    assertion = self._generate_assertion()
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 1554, in _generate_assertion
    private_key, self.private_key_password), payload)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/crypt.py", line 162, in from_string
    from OpenSSL import crypto
  File "/usr/local/lib/python2.7/site-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "/usr/local/lib/python2.7/site-packages/OpenSSL/SSL.py", line 118, in <module>
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

12 ответов


оказалось, что проблема была с моей установкой pyOpenSSL, pyOpenSSL-0.15.1 .

Я:

pip uninstall pyopenssl

а то

pip install pyopenssl

...и мой скрипт Python снова сработал!


обновление pyopenssl с pip не работал ни одна из команд, связанных с pip работал на меня. Путем обновления pyopenssl С easy_install выше проблема может быть решена.

sudo python -m easy_install --upgrade pyOpenSSL

credit @delimiter (ответ)


обновить pyopenssl модуль:

$ sudo pip install -U pyopenssl

недавно я испытал ту же проблему, и после нескольких часов расследования я узнал, что это было вызвано новым криптография 2.0 обновление. Это обновление сломает многие пакеты с помощью pyopenssl (например, Sentry, Google Analytics и т. д.). Просто понизить его до 1,9 решит проблему.

будьте осторожны, если вы используете "pip install-U", он автоматически обновит пакеты, которые не перечислены в требованиях.формат txt.


в моем случае, проблема заключалась в том, что пакет был установлен в root каталоги, и я выполнял скрипт, который просил pyopenssl С моим пользователем Linux forvas. И этот пользователь не может использовать библиотеки, установленные в root.

поэтому сначала мне пришлось удалить пакет с aptitude или apt-get.

sudo aptitude purge python-openssl

поэтому мне пришлось установить пакет снова, но с учетом пользователя, который выполняет скрипт, который спрашиваю библиотеку. Посмотрите, где установлена библиотека в зависимости от пользователя Linux и аргумента --user of pip.

корпус 1

forvas@server:$ pip install pyopenssl

не удалось установить пакеты из-за EnvironmentError:

[Errno 13] отказано в разрешении: '/ usr / local/lib / python2.7 / dist-packages / OpenSSL'

рассмотрите возможность использования --user вариант или проверка разрешения.

корпус 2

forvas@server:$ sudo pip install pyopenssl

/ usr / local/lib / python2.7 / dist-packages / OpenSSL/*

/ usr / local/lib / python2.7 / dist-packages / pyOpenSSL-17.5.0.р-н-информация/*

корпус 3

forvas@server:$ sudo pip install --user pyopenssl

/главная/forvas/.local/lib / python2.7 / site-packages/OpenSSL/*

/главная/forvas/.local/lib / python2.7 / site-packages / pyOpenSSL-17.5.0.р-н-информация/*

корпус 4

root@server:$ pip install pyopenssl

/ usr / local/lib / python2.7 / dist-packages / OpenSSL/*

/ usr / local/lib / python2.7 / dist-packages / pyOpenSSL-17.5.0.р-н-информация/*

корпус 5

root@server:$ pip install --user pyopenssl

/root/.local/lib / python2.7 / site-packages/OpenSSL/*

/root/.local/lib / python2.7 / site-packages / pyOpenSSL-17.5.0.р-н-информация/*

вывод

моя проблема заключалась в том, что библиотека была установлена в каталогах дела 5.

решение

  • удаление пакетов.

  • как я выполняю скрипт с пользователем Linux forvas, я смог переустановить пакет правильно с опциями 2 или 4 (в котором библиотека доступна для всех пользователей Linux) или, точнее, опция 3 (в которой библиотека доступна только для пользователей Linux forvas).


Я вижу как дамп стека python на консоли моей Ubuntu 16.04 VM, когда я попробовал ssh в VM.

    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

Pip сообщил, что pyopenssl не был установлен.

Я должен был сделать вместо этого:

$ apt install --reinstall python-openssl

у меня была такая же проблема на Ubuntu 16.04, но со следующим поворотом: когда virtualenv был активирован (. venv/bin/activate перед запуском работников сельдерея с pysolr, запросами и т. д. В моем случае) - все работало отлично, но когда я запускал сельдерей из командной строки, используя полные пути, и пути python - возникла проблема (и та же проблема работает от супервизора ). Кроме того, если это важно, virtualenv был в комплекте в другом месте на машине с той же версией Ubuntu.

решение было просто: добавление /full/path/to/venv/bin к пути ( как посоветовано здесь https://serverfault.com/questions/331027/supervisord-how-to-append-to-path) решил это.

к сожалению, я еще не указал, какое обновление вызвало это, но, надеюсь, это может помочь кому-то.


Я видел AttributeError: 'module' object has no attribute 'SSL_ST_INIT' тоже ошибка.

делаешь

sudo pip install pyOpenSSL==16.2.0

решить это для меня.


в моем случае он бросал ту же ошибку для удаления и обновления. Я не мог удалить или обновить.

AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

следующее сработало для меня.

# rm -rf /usr/lib/python2.7/site-packages/OpenSSL/
# rm -rf /usr/lib/python2.7/site-packages/pyOpenSSL-16.1.0.dist-info
# rm -rf /usr/lib/python2.7/site-packages/pyOpenSSL-18.0.0-py2.7.egg
# pip2.7 install pyopenssl
Collecting pyopenssl
Downloading 
.
.
100% |████████████████████████████████| 61kB 5.8MB/s 
Collecting cryptography>=2.2.1 (from pyopenssl)
.
.
Installing collected packages: cryptography, pyopenssl
Found existing installation: cryptography 1.7.2
Uninstalling cryptography-1.7.2:
  Successfully uninstalled cryptography-1.7.2
Successfully installed cryptography-2.2.2 pyopenssl-18.0.0

предупреждение: попробуйте это только при обновлении(sudo pip install pyOpenSSL==16.2.0) или удалить(pip uninstall pyopenssl) не помогает


Я сделал это, что помогло:

$ easy_install -U pip $ easy_install -U pyOpenSSL


моя проблема была вызвана версией Python openssl, которая была в /usr/lib/python2.7/dist-packages/.

dpkg -l | grep openssl показал:

ii  python-openssl                                0.15.1-2build1                               all          Python 2 wrapper around the OpenSSL library

Я удалил его с помощью sudo apt-get remove python-openssl. Затем я запустил следующее, Чтобы установить версию дистрибутива pip.

curl -o ./get-pip.py https://bootstrap.pypa.io/get-pip.py
sudo python2 ./get-pip.py

pip --version теперь отображает:

pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

затем я смог выполнить необходимую установку pip, которую я пытался завершить.


у меня была похожая ошибка:

    from OpenSSL import rand, crypto, SSL
  File "/usr/local/lib/python3.5/dist-packages/OpenSSL/SSL.py", line 112, in <module>
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: module 'lib' has no attribute 'SSL_ST_INIT'

и ни один из других ответов не мог это исправить, потому что pip ничего не мог установить. Вместо этого я сделал это сначала с терминала:

sudo rm -r /usr/local/lib/python3.5/dist-packages/OpenSSL

затем переустановил pyopenssl с pip:

sudo pip install pyopenssl

и все стало подливой.