내 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'
답변
pyopenssl
pip로 업그레이드 하는 것은와 관련된 명령 pip
이 나를 위해 작동 하지 않았기 때문에 작동하지 않았습니다 . 업그레이드함으로써 pyopenssl
으로 easy_install
, 위의 문제가 해결 될 수있다.
sudo python -m easy_install --upgrade pyOpenSSL
크레딧 @delimiter ( 답변 )
답변
pyOpenSSL, pyOpenSSL-0.15.1 설치에 문제가있는 것으로 밝혀졌습니다.
나는했다 :
pip uninstall pyopenssl
그리고
pip install pyopenssl
… 그리고 내 Python 스크립트가 다시 작동했습니다!
답변
pyopenssl
모듈 업데이트 :
$ sudo pip install -U pyopenssl
답변
비슷한 오류가 발생했습니다.
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
그런 다음 pip로 pyopenssl을 다시 설치했습니다.
sudo pip install pyopenssl
그리고 모든 것이 육즙이었습니다.
답변
다음 명령을 시도하십시오.
easy_install -U pip
easy_install -U pyOpenSSL
답변
나는 최근에 같은 문제를 경험했고 몇 시간 동안 조사한 결과 New cryptography 2.0 에 의해 발생한 것으로 나타났습니다. 업그레이드 . 이 업그레이드는 pyopenssl (예 : Sentry, Google Analytics 등)을 사용하는 많은 패키지를 손상시킵니다. 1.9로 다운 그레이드하면 문제가 해결됩니다.
“pip install -U”를 사용하는 경우주의해야합니다. 이는 requirements.txt에 나열되지 않은 패키지를 자동으로 업그레이드합니다.
답변
제 경우 문제는 패키지가 루트 디렉토리 에 설치되어 pyopenssl
있고 Linux 사용자 forvas 를 요청하는 스크립트를 실행하고 있다는 것 입니다. 그리고 그 사용자는 루트에 설치된 라이브러리를 사용할 수 없습니다.
그래서 먼저 aptitude
또는로 패키지를 제거해야했습니다 apt-get
.
sudo aptitude purge python-openssl
따라서 패키지를 다시 설치해야했지만 라이브러리를 요청하는 스크립트를 실행하는 사용자를 고려했습니다. Linux 사용자 및의 인수 --user
에 따라 라이브러리가 설치된 위치를 살펴보십시오 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.dist-info/*
사례 3
forvas@server:$ sudo pip install --user pyopenssl
/home/forvas/.local/lib/python2.7/site-packages/OpenSSL/*
/home/forvas/.local/lib/python2.7/site-packages/pyOpenSSL-17.5.0.dist-info/*
사례 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.dist-info/*
사례 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.dist-info/*
결론
내 문제는 라이브러리가 케이스 5 의 디렉토리에 설치되었다는 것 입니다.
해결책
-
패키지 제거.
-
Linux 사용자 forvas로 스크립트를 실행하면서 옵션 2 또는 4 (모든 Linux 사용자가 라이브러리를 사용할 수 있음) 또는 더 정확한 옵션 3 (라이브러리가 있는 옵션)을 사용 하여 패키지를 올바르게 다시 설치할 수있었습니다. Linux 사용자 forvas 에서만 사용 가능 ).
