3

I am on Mac El Capitan. My system shows me stuck on PyOpenSSl version 0.13.1. When I upgrade to 16.2.0, the upgrade is successful. However, when I check the version, it's still on 0.13.1. Why is this?

MacBook-Air:include$ sudo pip install pyopenssl --user --upgrade
Password:
The directory '/Users/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pyopenssl
  Downloading pyOpenSSL-16.2.0-py2.py3-none-any.whl (43kB)
    100% |████████████████████████████████| 51kB 1.1MB/s
Requirement already up-to-date: cryptography>=1.3.4 in /Library/Python/2.7/site-packages (from pyopenssl)
Collecting six>=1.5.2 (from pyopenssl)
  Downloading six-1.10.0-py2.py3-none-any.whl
Requirement already up-to-date: cffi>=1.4.1 in /Library/Python/2.7/site-packages (from cryptography>=1.3.4->pyopenssl)
Requirement already up-to-date: pyasn1>=0.1.8 in /Library/Python/2.7/site-packages (from cryptography>=1.3.4->pyopenssl)
Collecting setuptools>=11.3 (from cryptography>=1.3.4->pyopenssl)
  Downloading setuptools-32.3.1-py2.py3-none-any.whl (479kB)
    100% |████████████████████████████████| 481kB 1.3MB/s
Requirement already up-to-date: idna>=2.0 in /Library/Python/2.7/site-packages (from cryptography>=1.3.4->pyopenssl)
Requirement already up-to-date: ipaddress in /Library/Python/2.7/site-packages (from cryptography>=1.3.4->pyopenssl)
Requirement already up-to-date: enum34 in /Library/Python/2.7/site-packages (from cryptography>=1.3.4->pyopenssl)
Requirement already up-to-date: pycparser in /Library/Python/2.7/site-packages (from cffi>=1.4.1->cryptography>=1.3.4->pyopenssl)
Installing collected packages: six, pyopenssl, setuptools

And then checking the version, it's the wrong one:

Successfully installed pyopenssl-16.2.0 setuptools-32.3.1 six-1.10.0
MacBook-Air:include$ pip show pyopenssl
Name: pyOpenSSL
Version: 0.13.1
Summary: Python wrapper module around the OpenSSL library
Home-page: http://pyopenssl.sourceforge.net/
Author: Jean-Paul Calderone
Author-email: exarkun@twistedmatrix.com
License: APL2
Location: /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Requires:
John Vandenberg
  • 474
  • 6
  • 16
user2989813
  • 283
  • 1
  • 5
  • 16
  • [How do I install pyOpenSSL on Mac OS X?](http://stackoverflow.com/q/14361569), [Updating openssl in python 2.7](http://stackoverflow.com/q/18752409), [Python referencing old SSL version](http://stackoverflow.com/q/24323858), [Python and OpenSSL version reference issue on OS X](http://stackoverflow.com/q/37690054), [Python 3.3 and Installing PyOpenSSL on a Mac](http://stackoverflow.com/q/21899573), [Using Python with homebrew on OS X](http://stackoverflow.com/q/25441252), etc... – jww Jan 16 '17 at 02:06
  • Thanks for the suggestions. I have tried to create the proper symlink but still having trouble. I have the following link: staff 44 Jan 16 01:11 openssl -> /usr/local/Cellar/openssl/1.0.2j/bin/openssl. However, 'which openssl' yields 'OpenSSL 0.9.8zh 14 Jan 2016', not the 1.0.2j version. Any idea why? – user2989813 Jan 16 '17 at 09:33

1 Answers1

1

The core of the problem is that sudo pip install pyopenssl --user --upgrade was installing into a directory where the "non-sudo" pip ... did not look first. There are many reasons why that might happen.

The first aspect to simplify this problem is understanding that pip install --user ... should never need to be run with sudo. The --user option means install into the user packages directory (it should be under /Users/your_username/ somewhere), and advanced privileges are not needed for that.

If you try pip install --user --upgrade pyopenssl without sudo, it should solve the problem.

The old pyopenssl-0.13.1 will still exist in /System/Library/Frameworks/Python.framework/Versions/2.7/... , however the new one should now exist in /Users/your_username/... and should be found first by the Python import machinery.

However, there is a reasonable chance that pip install --user is installing the new version of pyopenssl in a directory where the Python import machinery doesnt look. To fix this, you need to know where pip is installing the package. Try using pip install --user --verbose .. if the default pip output it doesnt tell you were the package is being installed. Then you need to add this path to PYTHONPATH, such as the following with ... replaced with where pip installed the package (it should be under /Users/your_username/ somewhere).

export PYTHONPATH="/Users/your_username/Library/...:$PYTHONPATH"
pip show pyopenssl

If that works, add the above export .. to your bash .profile so that your Python runtime is always loading packages from that directory first.

John Vandenberg
  • 474
  • 6
  • 16