我如何在 El Capitan 上 运行 psycopg2 而不会遇到 libssl 错误
How do I run psycopg2 on El Capitan without hitting a libssl error
我在 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
但我仍然遇到同样的错误。
我也试过 adding symlinks 到 /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
我该如何解决这个问题?
我尝试了以下方法:
我的机器上安装了 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
。
这样做让我再次回到工作设置。
P.S.: brew 建议的步骤在这里可能不相关,但我提出这个是因为您看到了权限问题。 You could also disable rootless mode.
原因确实是 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 时都需要这样做。
你用anaconda吗?如果是这样的话,一个对我有用的非常简单的解决方案就是使用 conda 进行简单安装。
具体在命令行中输入以下内容:
conda 安装 psycopg2
这对我来说也是一个痛苦,因为我曾经设置
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
在我的测试脚本中,偷偷通过值。这远非理想,但我希望它能帮助别人。
我是 运行 El Capitan
10.11.5 和 python
3.5.1 并且在尝试导入 psycopg2
时遇到了同样的错误,要么是简单的控制台或 PyCharm 内。我设法通过进入 root 来解决这个问题:
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/
基于@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
我在 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
但我仍然遇到同样的错误。
我也试过 adding symlinks 到 /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
我该如何解决这个问题?
我尝试了以下方法:
我的机器上安装了 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
。
这样做让我再次回到工作设置。
P.S.: brew 建议的步骤在这里可能不相关,但我提出这个是因为您看到了权限问题。 You could also disable rootless mode.
原因确实是 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 时都需要这样做。
你用anaconda吗?如果是这样的话,一个对我有用的非常简单的解决方案就是使用 conda 进行简单安装。
具体在命令行中输入以下内容:
conda 安装 psycopg2
这对我来说也是一个痛苦,因为我曾经设置
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
在我的测试脚本中,偷偷通过值。这远非理想,但我希望它能帮助别人。
我是 运行 El Capitan
10.11.5 和 python
3.5.1 并且在尝试导入 psycopg2
时遇到了同样的错误,要么是简单的控制台或 PyCharm 内。我设法通过进入 root 来解决这个问题:
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/
基于@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