Python AttributeError:'module'对象没有属性'SSL_ST_INIT'

Ben*_*ler 72 python openssl pyopenssl

我的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'
Run Code Online (Sandbox Code Playgroud)

Muh*_*san 132

pyopenssl使用pip进行升级并不起作用,因为与之相关的命令都没有pip为我工作.通过升级pyopenssl使用easy_install,上述问题就可以迎刃而解.

sudo python -m easy_install --upgrade pyOpenSSL
Run Code Online (Sandbox Code Playgroud)

信用@delimiter(答案)

  • 谢谢!使用此命令后,我必须重新启动终端/重新登录服务器,然后`pip`可以正常工作。 (2认同)

Ben*_*ler 75

原来问题在于我安装了pyOpenSSL,pyOpenSSL-0.15.1.

我做了:

pip uninstall pyopenssl
Run Code Online (Sandbox Code Playgroud)

然后

pip install pyopenssl
Run Code Online (Sandbox Code Playgroud)

...我的Python脚本再次运行!

  • 我在运行`pip`时遇到了麻烦,这解决了它`sudo easy_install pyOpenSSL` (34认同)
  • 在我的情况下,我不得不像这样卸载:`sudo aptitude purge python-openssl`因为它安装了`aptitude`.我想我可以用'apt-get`做同样的事情 (3认同)
  • pip uninstall pyonpenssl抛出相同的错误 (3认同)
  • 刚刚升级了密码学; 你的解决方案就足够了 (2认同)
  • 每次我运行“ pip”时,我都会收到错误消息。rm -rf cryptography也是如此,并且可以再次运行pip。 (2认同)

use*_*292 15

更新您的pyopenssl模块:

$ sudo pip install -U pyopenssl
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用 virtualenv,则不需要 sudo。 (2认同)

wor*_*ise 12

我有一个类似的错误:

    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'
Run Code Online (Sandbox Code Playgroud)

并没有其他答案可以解决它,因为pip无法安装任何东西.相反,我首先从终端做了这件事:

sudo rm -r /usr/local/lib/python3.5/dist-packages/OpenSSL
Run Code Online (Sandbox Code Playgroud)

然后用pip重新安装pyopenssl:

sudo pip install pyopenssl
Run Code Online (Sandbox Code Playgroud)

一切都很好吃.

  • 值得注意的是:如果您使用 virtualenv 那么可能需要删除 `rm -r ~/.virtualenvs/YourEnv/local/lib/python3.6/site-packages/OpenSSL ` (2认同)

小智 9

我最近遇到了同样的问题,经过几个小时的调查,我发现它是由新的加密2.0升级引起的.此升级将使用pyopenssl(如Sentry,Google Analytics等)打破许多软件包.只需将其降级为1.9即可解决问题.

如果您使用"pip install -U",请务必小心,它会自动升级requirements.txt中未列出的软件包.


fel*_*021 9

尝试使用以下命令:

easy_install -U pip
easy_install -U pyOpenSSL
Run Code Online (Sandbox Code Playgroud)


for*_*vas 5

就我而言,问题在于该软件包已安装在目录中,并且我正在执行pyopensslLinux用户forvas要求的脚本。该用户不能使用安装在root用户中的库。

因此,首先我必须使用aptitude或删除软件包apt-get

sudo aptitude purge python-openssl
Run Code Online (Sandbox Code Playgroud)

因此,我不得不再次安装该软件包,但要考虑执行脚本的用户,该脚本正在请求该库。看看到库随Linux用户和参数安装位置--userpip

情况1

forvas@server:$ pip install pyopenssl
Run Code Online (Sandbox Code Playgroud)

由于EnvironmentError无法安装软件包:

[Errno 13]权限被拒绝:“ / usr / local / lib / python2.7 / dist-packages / OpenSSL”

考虑使用该--user选项或检查权限。

情况二

forvas@server:$ sudo pip install pyopenssl
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

/root/.local/lib/python2.7/site-packages/OpenSSL/*

/root/.local/lib/python2.7/site-packages/pyOpenSSL-17.5.0.dist-info/*

结论

我的问题是该库安装在案例5的目录中。

  • 卸载程序包。

  • 当我使用Linux用户forvas执行脚本时,我能够正确地使用选项24(其中所有的Linux用户都可以使用该库)重新安装该软件包,或者更准确地说,使用选项3(其中该库为仅适用于Linux用户forvas)。


小智 5

我遇到了同样的问题,由于 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
Run Code Online (Sandbox Code Playgroud)

之后,一切都按预期进行。