7

I'm trying to make an application that automatically updates a Google Plus spreadsheet. In order to do this I had to set up gspread, which also requires pyOpenSSL in order to work. Without it, it throws this error:

CryptoUnavailableError: No crypto library available

Using pip, I type the command:

pip install pyopenssl

And import using:

from OpenSSL import SSL

When I try to run the code, I receive the following error:

ImportError: No module named cryptography.hazmat.bindings.openssl.binding

I've tried reinstalling pyOpenSSL multiple times, and also tried reinstalling the cryptography dependency (as well as attempting to install previous versions of pyOpenSSL).

This problem is documented a few times, but the only solution I haven't tried is doing a fresh install of python, or the OS.

Any suggestions? Thanks in advance.

Mykola
  • 3,343
  • 6
  • 23
  • 39
Constantly Confused
  • 595
  • 4
  • 10
  • 24

2 Answers2

3

Good luck with that. Debugging ImportError issues on Windows is not for the faint of the heart.

Even though the ImportError refers to cryptography.hazmat.bindings.openssl.binding this does not need to be the original problem. For whatever reasons I often have ImportError shadowing another problem.

The first thing I would try is to run

python -v -c "from OpenSSL import SSL"

and capture the output. Look for any problems close to the final error.

It could be one of the following:

  • cffi failing to compile the bindings (the precompiled bindings should have been installed by pip install, but sometimes stuff breaks...)
  • the bindings trying to import the SSL DLLs which are not available (but should also be pulled by pip install, but I am not quite sure about that)
  • the DLLs being available but not loadable because some dependent DLL is missing, which could be the visual studio runtime for example.

My bet would be on the last point. The only thing that ever helps me was to open the relevant module.pyd with Dependency Walker. More often than not some weird problem (like another DLL being found with the wrong architecture) would turn out to be the reason.

Good luck!

Bluehorn
  • 2,956
  • 2
  • 22
  • 29
-1

This is how I solved it in my Ubuntu Desktop. In windows you need to figure out the solution but the real reason for this problem is same both in Linux and Windows

PyOpenSSL 14.x+ uses cffi-based cryptography package, maybe this is a cause of your issue - cffi needs libffi (or libffi-dev) system package, this is a new non-Python dependency.

First do this

sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

and then

pip install cryptography

Note the key module here is libffi-dev..I think instead of apt-get, you can also use pip install if you have pip installed already

In the meantime this is the documentation says about pyOpenSSL binding

This is a “Hazardous Materials” module. You should ONLY use it if you’re 100% absolutely sure that you know what you’re doing because this module is full of land mines, dragons, and dinosaurs with laser guns.

That's a pretty bold warning I must say

Mayukh Sarkar
  • 2,289
  • 1
  • 14
  • 38