[python] Python AttributeError : ‘모듈’개체에 ‘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'



답변

pyopensslpip로 업그레이드 하는 것은와 관련된 명령 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 에서만 사용 가능 ).