如何在没有遇到libssl错误的情况下在El Capitan上运行psycopg2

Aid*_*wen 18 python psycopg2 libssl osx-elcapitan

我的Mac上有一个python django dev设置,刚升级到El Capitan.

我在virtualenv中安装了psycopg2但是当我运行我的服务器时出现以下错误 -

django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: dlopen(/Users/aidan/Environments/supernova/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.1.0.0.dylib
  Referenced from: /Users/aidan/Environments/supernova/lib/python2.7/site-packages/psycopg2/_psycopg.so
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

我已经尝试重新安装我的virtualenv

pip install -f requirements.txt
Run Code Online (Sandbox Code Playgroud)

我尝试升级psycopg2

pip uninstall psycopg2
pip install psycopg2
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的错误.

我也尝试过添加符号链接,/usr/lib但El Capitan的新无根的东西不允许 -

$ sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib
 /usr/lib
ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

所以我试着/usr/local无济于事.

openssl的系统版本似乎是1.0.2 -

$ openssl version
OpenSSL 1.0.2d 9 Jul 2015
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Nan*_*ali 22

我尝试了以下方法:

我在我的机器上安装了brew.跑步$ brew doctor给了我一个建议,要做以下事情:

$ sudo chown -R $(whoami):admin /usr/local

完成后,我重新安装psycopg2并执行以下操作:

$ sudo ln -s /Library/PostgreSQL/9.3/lib/libssl.1.0.0.dylib /usr/local/lib/
$ sudo ln -s /Library/PostgreSQL/9.3/lib/libcrypto.1.0.0.dylib /usr/local/lib/
Run Code Online (Sandbox Code Playgroud)

请注意PostgreSQL的版本和路径/usr/local/lib.

这样做让我重新回到了工作设置.

PS:brew建议的步骤可能与此无关,但我提出这个问题是因为您看到了许可问题.您还可以禁用无根模式.


小智 17

原因确实是psycopg2使用了一些PostgreSQL库的相对路径.要修复它,我用过

sudo install_name_tool -change libpq.5.dylib /Library/PostgreSQL/9.4/lib/libpq.5.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libcrypto.1.0.0.dylib /Library/PostgreSQL/9.4/lib/libcrypto.1.0.0.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libssl.1.0.0.dylib /Library/PostgreSQL/9.4/lib/libssl.1.0.0.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
Run Code Online (Sandbox Code Playgroud)

将相对路径转换为绝对路径.当然,每次重新安装psycopg2时都需要这样做.


小智 7

你用蟒蛇吗?如果是这样,一个非常简单的解决方案对我来说就是简单地使用conda进行安装.

具体来说,在命令行中输入以下内容:

conda安装psycopg2