Python AttributeError : '모듈'개체에 'SSL_ST_INIT'속성이 없습니다.


80

내 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'

이 문제를 debian-jessie로 실행하고 python-openssljessie-backports에서 업그레이드 된 패키지 (16.0.0-1 ~ bpo8 + 1)도 작동하지 않으므로 다음 솔루션에 따라 pip를 사용하여 업그레이드해야합니다 (사용 된 버전은 18.0이었습니다. .0)
iuridiniz

답변:


160

pyopensslpip로 업그레이드 하는 것은와 관련된 명령 pip이 나를 위해 작동 하지 않았기 때문에 작동하지 않았습니다 . 업그레이드함으로써 pyopenssl으로 easy_install, 위의 문제가 해결 될 수있다.

sudo python -m easy_install --upgrade pyOpenSSL

크레딧 @delimiter ( 답변 )


2
감사! 이 명령 후에 터미널을 다시 시작하고 서버에 다시 로그인해야했고 pip그 후에는 정상적으로 작동했습니다.
Jarvis Johnson

새로운 오류 충족 -error : 설치 스크립트가 오류로 종료되었습니다. 'gcc'명령이 종료 상태 1로 실패했습니다.
brainLoop

이것은 아마도 도움이 될 것이지만 로그 아웃했다가 다시 로그인해도 여전히 AttributeErrorOP에 표시됩니다.
Adrian Keister

80

pyOpenSSL, pyOpenSSL-0.15.1 설치에 문제가있는 것으로 밝혀졌습니다.

나는했다 :

pip uninstall pyopenssl

그리고

pip install pyopenssl

... 그리고 내 Python 스크립트가 다시 작동했습니다!


35
내가 실행에 문제가 있었다 pip이 그것을 해결, 자체sudo easy_install pyOpenSSL
chinmay

2
방금 암호화를 업그레이드했습니다. 귀하의 솔루션은 제 경우에 충분했습니다
denvar

3
제 경우에는 다음과 같이 제거 sudo aptitude purge python-openssl해야했습니다 aptitude.. 저도 똑같이 할 수있을 것 같아요apt-get
ChesuCR

2
실행할 때마다 오류가 발생했습니다 pip. 그래서 rm -rf cryptographypip를 다시 실행할 수 있습니다.
John Strood

1
이 문제로 인해 pip를 성공적으로 실행하지 못했습니다. 그래서 Ben의 지시를 따르기 전에 lib / python2.7 / site-packages에서 암호화를 제거해야했습니다.
Milad M

17

pyopenssl모듈 업데이트 :

$ sudo pip install -U pyopenssl

1
감사합니다. 제거하고 다시 설치하는 것보다 더 효율적이라고 생각합니다.
Ben Wheeler

1
virtualenv를 사용하는 경우 sudo가 필요하지 않습니다.
Chris

17

비슷한 오류가 발생했습니다.

    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

그리고 모든 것이 육즙이었습니다.


1
가치는 지적 : 당신이 VIRTUALENV 사용하는 경우 다음 아마 당신은 제거해야 rm -r ~/.virtualenvs/YourEnv/local/lib/python3.6/site-packages/OpenSSL
warcholprzemo

11

다음 명령을 시도하십시오.

easy_install -U pip
easy_install -U pyOpenSSL

9

나는 최근에 같은 문제를 경험했고 몇 시간 동안 조사한 결과 New cryptography 2.0 에 의해 발생한 것으로 나타났습니다. 업그레이드 . 이 업그레이드는 pyopenssl (예 : Sentry, Google Analytics 등)을 사용하는 많은 패키지를 손상시킵니다. 1.9로 다운 그레이드하면 문제가 해결됩니다.

"pip install -U"를 사용하는 경우주의해야합니다. 이는 requirements.txt에 나열되지 않은 패키지를 자동으로 업그레이드합니다.


감사합니다. pyopenssl을 업그레이드하는 것만으로는 충분하지 않았습니다.
r11

5

제 경우 문제는 패키지가 루트 디렉토리 에 설치되어 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 에서만 사용 가능 ).


파이썬 3은 어떻게 보일까요?
Adrian Keister

이 예제에 따르면 예를 들어 사례 3은 sudo python3 -m pip install --user pyopenssl이고 패키지는 /home/forvas/.local/lib/python3.6/site-packages.
forvas

4

나는 똑같은 문제가 있었고 pip가 더 이상 작동하지 않았기 때문에 수동으로 작업해야했습니다.

wget https://files.pythonhosted.org/packages/40/d0/8efd61531f338a89b4efa48fcf1972d870d2b67a7aea9dcf70783c8464dc/pyOpenSSL-19.0.0.tar.gz
tar -xzvf pyOpenSSL-19.0.0.tar.gz
cd pyOpenSSL-19.0.0
sudo python setup.py install

그 후 모든 것이 예상대로 작동했습니다.


3

내 문제는 .NET에 있던 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 설치를 수행 할 수있었습니다.


1
감사합니다 @heatfanjohn. 나는 당신과 똑같은 상황에 있었고 당신이 쓴대로 작동합니다!
icasimpan

3

이것은 나를 위해 일했습니다.

sudo apt remove python-openssl

2

나도 AttributeError: 'module' object has no attribute 'SSL_ST_INIT'오류를 보았다 .

하기

sudo pip install pyOpenSSL==16.2.0

나를 위해 해결했습니다.


2

다른 사람이이 작업에 적합한 주문을 정확히 찾지 못하는 경우를 대비하여 2018 년 11 월 현재 저에게 효과가 있었던 것은 다음과 같습니다.

sudo rm -rf /usr/local/lib/python2.7/dist-packages/OpenSSL/ sudo apt install --reinstall python-openssl

행운을 빕니다!


2

brew를 통해 설치된 python 2 및 3이있는 MacOS에서이 문제가 발생했습니다. 그것은 밝혀 brew uninstall파이썬과 파이썬을 보내고 @ 2 파이썬의 해당 버전에 대한 설치 한 라이브러리를 제거하지 않습니다; 즉 :

/usr/local/lib/python3.7/site-packages/
/usr/local/lib/python2.7/site-packages/

거기에 뭔가가 옳지 않았기 때문에 저에게 도움이 된 것은 brew의 python 2 및 3에 설치된 모든 라이브러리를 삭제 / 이동하고 다시 시작하는 것입니다 (그리고 여기서부터 virtualenvs 만 사용하도록 확인하십시오).

brew uninstall --ignore-dependencies python@2
brew uninstall --ignore-dependencies python
sudo mv /usr/local/lib/python3.7 ~/python3.7libs-backup
sudo mv /usr/local/lib/python2.7 ~/python2.7libs-backup
brew install python
brew install python@2

1

제 경우에는 제거 및 업그레이드에 대해 동일한 오류가 발생했습니다. 제거하거나 업그레이드 할 수 없습니다.

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)가 도움이되지 않는 경우에만 시도하십시오.


1

Ubuntu 16.04에서 동일한 문제가 발생했지만 다음과 같은 트위스트가 있습니다 .virtualenv가 활성화되었을 때 (. venv/bin/activate 내 경우에는 pysolr 요청 등 셀러리 근로자를 실행하기 전에) - 모든 것이 완벽하게 작동하지만, 내가 명령 줄에서 셀러리를 실행할 때 전체 경로를 사용하여 , 및 python 경로-문제가 발생했습니다 (supervisord에서 실행되는 동일한 문제). 또한 중요한 경우 virtualenv는 동일한 Ubuntu 버전을 사용하는 머신의 다른 위치에 번들로 제공됩니다.

솔루션은 간단했습니다. /full/path/to/venv/binPATH에 추가 (여기에 권고 된대로 /server/331027/supervisord-how-to-append-to-path )하면이 문제가 해결되었습니다.

불행히도, 나는 어떤 종류의 업데이트가 이것을 일으켰는지 아직 정확히 밝히지 않았지만 이것이 누군가를 도울 수 있기를 바랍니다.


1

방금 Ubuntu 16.04 호스트에서 이것을 만났습니다. python-openssl 및 python-crypotgraphy 용 apt 리포지토리 패키지와 /usr/local/python2.7/dist-packages에 pip를 사용하여 수동으로 설치 한 사용자간에 버전 충돌이있는 것으로 보입니다.

이 상태가되면 시스템 표준 pip도 실행할 수 없습니다. 따라서 트리의 / usr / local 부분을 제외하는 PYTHONPATH 환경 변수를 수동으로 설정하여 닭고기와 계란 문제를 해결했습니다.

    $ export PYTHONPATH="/usr/lib/python2.7:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/gtk-2.0"
    $ /usr/bin/pip uninstall cryptography
    $ unset PYTHONPATH

파이썬 셸과 함께 사용할 위의 라이브러리 디렉토리 목록을 얻었습니다.

    import sys
    for p in sys.path:
       print(p)

그런 다음 하나의 / usr / local 디렉토리를 제외하고 나열된 모든 항목을 복사합니다. 시스템 경로에 다른 목록이있을 수 있습니다. 그에 따라 조정하십시오.

또한 apt-get install --reinstall python-openssl python-cryptographybash 히스토리에 몇 가지 수동 명령이 흩어져 있었는데 , 이는 필요했을 수도 있고 아닐 수도 있습니다.


1

내 솔루션은 다른 솔루션이 나를 위해 작동하지 않은 후에 훨씬 더 단순했습니다. pip를 통해 설치 / 제거하려고 시도한 모든 것이 동일한 오류와 스택 추적을 반환했습니다.

결국 pip3를 통해 pip를 업데이트하려고 시도했고 완벽하게 작동했습니다.

pip3 install --upgrade pip

나는 다시 pip를 사용했고 모든 것이 올바르게 작동했습니다. 그래도 pip 명령을 실행할 때 Python 3.6을 참조한다는 것을 알았습니다.

# pip install pyopenssl`enter code here`
Requirement already satisfied: pyopenssl in /usr/lib64/python3.6/site-packages (18.0.0)

<snipped>

Requirement already satisfied: pycparser in /usr/lib64/python3.6/site-packages (from cffi!=1.11.3,>=1.7->cryptography>=2.2.1->pyopenssl) (2.19)

1

시도해보십시오 :

export PYTHONPATH="/usr/lib/python2.7:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/gtk-2.0"
sudo apt-get install --reinstall python-openssl

1

나는보고 있었다 유사 나는 VM에 SSH를 시도 할 때 내 우분투 16.04 VM의 콘솔에 파이썬 스택 덤프.

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

pip 보고했다 pyopenssl설치되지 않았다고 .

대신 이렇게해야했습니다.

sudo apt install --reinstall python-openssl

0

이것은 오래된 게시물이므로 2019 년 말에 누군가를 돕기를 희망합니다. 제 문제는 Python 2 대 3과 관련이있었습니다. 저는 Python 3을 독점적으로 사용하고 있습니다. 더 이상 레거시 Python이 없습니다. 하지만 내 OS (예 : Ubuntu 16.04)에는 여전히 Python 2.7이 설치되어 있습니다. 따라서 pip기본적으로 전역 으로 실행할 때 (예 : virtualenv가 아닌) Python 2 버전의 pip.

나를 위해이 문제를 해결하기 위해 다음을 사용했습니다.

제거 docker-compose:

sudo pip3 uninstall docker-compose  
sudo pip uninstall docker-compose

docker-compose내 버전의 Python을 다시 설치하십시오 .

sudo pip3 install docker-compose

0

OSX 10.15.5 Catalina를 실행하고 pyenv를 사용하고 있습니다.

이 페이지에서 여러 가지 다른 솔루션을 시도해 본 결과는 다음과 같습니다.

pyenv uninstall 3.6.8
pyenv install 3.6.8

최근에이 버전의 Python을 설치했기 때문에이 문제가 왜 해결되었는지 잘 모르겠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.