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 (ответ)
недавно я испытал ту же проблему, и после нескольких часов расследования я узнал, что это было вызвано новым криптография 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
) не помогает
моя проблема была вызвана версией 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
и все стало подливой.