code

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

codestyles 2020. 11. 9. 08:12
반응형

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'

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

sudo python -m easy_install --upgrade pyOpenSSL

credit @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

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


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

"pip install -U"를 사용하는 경우에는 requirements.txt에 나열되지 않은 패키지가 자동으로 업그레이드되므로주의하십시오.


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

easy_install -U pip
easy_install -U pyOpenSSL

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


나는 똑같은 문제가 있었고 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

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


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


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

나도 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

WARNING: Try this only if upgrading(sudo pip install pyOpenSSL==16.2.0) or uninstalling(pip uninstall pyopenssl) doesn't help


I had the same problem on Ubuntu 16.04, but with the following twist: when virtualenv was activated (. venv/bin/activate before running celery workers with pysolr, requests, etc in my case) - everything worked perfectly, but when I ran celery from command line using full paths, and python paths - there was a problem (and same problem running from supervisord ). Also, if important, virtualenv has been bundled elsewhere on the machine with same Ubuntu version.

Solution was simple: adding /full/path/to/venv/bin to PATH ( as advised here https://serverfault.com/questions/331027/supervisord-how-to-append-to-path ) solved this.

Unfortunately, I have not yet pin-pointed what kind of update caused this, but hopefully this may help someone.


Just in case anyone else isn't finding exactly the right incantations to make this work, as of Nov 2018 the thing that worked for me was:

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

Good luck!


I just encountered this on my Ubuntu 16.04 host. There appears to be a version conflict between the apt repo packages for python-openssl and python-crypotgraphy, vs what someone installed manually with pip into /usr/local/python2.7/dist-packages.

Once it got into this state, the system standard pip couldn't execute, either. I got around the chicken-and-egg problem by manually setting a PYTHONPATH environment variable that excluded the /usr/local part of the tree thusly:

    $ 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

I acquired the above list of library directories to use with the python shell:

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

and then copying everything listed except the one /usr/local directory. Your system may have a different list in its path. Adjust accordingly.

I also had some manual apt-get install --reinstall python-openssl python-cryptography commands scattered in my bash history, which may or may not have been necessary.


My solution was a lot more simplistic after these other solutions not working for me. Anything I tried to install/uninstall via pip returned the same error and stacktrace.

I ended up trying to update pip via pip3 and it worked flawlessly:

pip3 install --upgrade pip

I went back to using pip and everything worked correctly. I did notice that it was referencing Python 3.6 when running the pip commands though.

# 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)

Try with:

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

I was seeing similar python stack dump on the console of my Ubuntu 16.04 VM when I tried ssh into the VM.

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

pip reported that pyopenssl was not installed.

I had to do this instead:

sudo apt install --reinstall python-openssl

This worked for me:

sudo apt remove python-openssl

참고URL : https://stackoverflow.com/questions/43267157/python-attributeerror-module-object-has-no-attribute-ssl-st-init

반응형