Import psycopg2 Library not loaded: libssl.1.0.0.dylib

Solution 1:

Instead of playing with symlinks in system library dirs, set the $DYLD_FALLBACK_LIBRARY_PATH to include the anaconda libraries. eg:

export DYLD_FALLBACK_LIBRARY_PATH=$HOME/anaconda/lib/:$DYLD_FALLBACK_LIBRARY_PATH

Solution 2:

After Homebrew wouldn't allow me to force link openssl the following worked fine:

pip install --global-option=build_ext \
            --global-option="-I/usr/local/opt/openssl/include" \
            --global-option="-L/usr/local/opt/openssl/lib" psycopg2

(this installation succeeded in a virtualenv on macOS)

Solution 3:

EDIT: potentially dangerous, read comments first!

See a much safer answer below: https://stackoverflow.com/a/30726895/308315


I ran into this exact issue about an hour after you posted it and just figured it out. I am using Mac OS X Yosemite, Python 2.7, and the Postgresql app.

There seems to be a non-working symlink set by default (or I introduced it while troubleshooting), to fix it first remove the incorrect links:

$ sudo rm /usr/lib/libssl.1.0.0.dylib
$ sudo rm /usr/lib/libcrypto.1.0.0.dylib

Then re-link them with (replace YOURUSERNAME with your Mac user name. I found it helpful to use tab to complete each step, to confirm the directory):

$ sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libssl.1.0.0.dylib /usr/lib
$ sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libcrypto.1.0.0.dylib /usr/lib

I believe the other solutions didn't work for you because your version is in anaconda.

Solution 4:

After bashing my head against the wall for a couple hours, these two solutions are guaranteed to work:

Option 1. This solves our problem without messing around with environment variables. Run this in your shell:

brew install --upgrade openssl
brew unlink openssl && brew link openssl --force

Boom! This upgrades the symbolic links in /usr/local for libssl and libcrypto. Now import psycopg2 works like a charm.

Option 2. If for some reason you would like to maintain the current symbolic links in usr/local, run this command in your shell:

export DYLD_FALLBACK_LIBRARY_PATH=$HOME/anaconda/lib/:$DYLD_FALLBACK_LIBRARY_PATH

Just make sure to replace $HOME/anaconda/lib above with the actual lib path. In my case, this was $HOME/miniconda2/envs/ali/lib.

This will only work for the shell/bash session you're currently in. To make the change persistent, add the export statement to your ~/.bash_profile or ~/.bashrc file.

Thoughts: IMO #1 is the proper way to deal with this problem, but I left #2 in case some people prefer working with environment variables rather than fixing symbolic links (if, for example, they have software with a dependency on the older openssl file versions).

Solution 5:

conda install psycopg works for me. It updates the following packages The following packages will be UPDATED:

conda:      3.19.1-py27_0 --> 4.0.5-py27_0
openssl:    1.0.2f-0      --> 1.0.2g-0
pip:        8.0.2-py27_0  --> 8.1.0-py27_0
setuptools: 19.6.2-py27_0 --> 20.2.2-py27_0
wheel:      0.26.0-py27_1 --> 0.29.0-py27_0