19

我在我的 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

我试过重新安装我的 virtualenv

pip install -f requirements.txt

我试过升级 psycopg2

pip uninstall psycopg2
pip install psycopg2

但我仍然遇到同样的错误。

我也尝试过添加符号链接/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

所以我尝试/usr/local了无济于事。

openssl的系统版本好像是1.0.2——

$ openssl version
OpenSSL 1.0.2d 9 Jul 2015

我该如何解决?

4

6 回答 6

23

我尝试了以下方法:

我的机器上安装了 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/

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

这样做让我再次回到工作设置。

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

于 2015-10-08T12:02:56.640 回答
18

原因确实是 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

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

于 2015-10-28T07:31:37.853 回答
7

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

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

康达安装 psycopg2

于 2016-04-18T23:35:41.013 回答
1

基于@ArtHarg 解决方案,我将它与 python 3.4、PostgreSQL 9.5 和 OS X el capitan 一起使用:

sudo install_name_tool -change libpq.5.dylib /Library/PostgreSQL/9.5/lib/libpq.5.dylib /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libcrypto.1.0.0.dylib /Library/PostgreSQL/9.5/lib/libcrypto.1.0.0.dylib /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libssl.1.0.0.dylib /Library/PostgreSQL/9.5/lib/libssl.1.0.0.dylib /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/psycopg2/_psycopg.so
于 2016-07-09T20:09:09.557 回答
0

我正在运行El Capitan10.11.5 和python3.5.1 并在尝试 import 时遇到了同样的错误psycopg2,无论是在简单的控制台中还是在 PyCharm 中。我设法通过进入根来解决这个问题:

sudo su -

然后符号链接两个库:

ln -s /Library/PostgreSQL/9.5/lib/libssl.1.0.0.dylib /usr/local/lib
ln -s /Library/PostgreSQL/9.5/lib/libcrypto.1.0.0.dylib /usr/local/lib

然后我经历了connection error一条以结束的消息:

psycopg2.OperationalError: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

我的 PostgreSQL 安装正在侦听 /tmp 中的套接字,因此需要另一个符号链接来允许连接:

ln -s /tmp/.s.PGSQL.5432 /var/pgsql_socket/
于 2016-06-18T06:41:00.830 回答
0

这对我来说也很痛苦,因为我曾经设置

export DYLD_FALLBACK_LIBRARY_PATH=/Library/Postgresql/9.5/lib

在我的 .bash_profile 中,一切正常。但是现在该环境变量是无法传递到新 shell 的环境变量之一。这意味着我可以从我的登录 shell 在 python 运行中很好地导入 psycopg2,但是我的测试脚本死了。

我现在将 $SIP_WORKAROUND_LIBRARY_PATH 设置为相同的值,OSX 将不理会它,然后我必须这样做:

export DYLD_FALLBACK_LIBRARY_PATH=$SIP_WORKAROUND_LIBRARY_PATH

在我的测试脚本中,偷偷通过。这远非理想,但我希望它可以帮助某人。

于 2016-05-03T11:43:36.853 回答