2015-10-06 73 views
18

我已经在我的Mac上安装了python django开发工具,并且已经升级到了El Capitan。如何在不碰到libssl错误的情况下在El Capitan上运行psycopg2

我有psycopg2安装在virtualenv中,但是当我跑我的服务器我得到下面的错误 -

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但埃尔卡皮坦新的无根的东西不让它 -

$ 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 

我该如何解决这个问题?

+0

昨天我有同样的令人沮丧的问题。做了一些相同的故障排除,无济于事。今天早上我重新开始了我的比赛,并且......像魔术一样,psycopg2再次运转。大概没有一点帮助,但我想我至少会说些什么。 – Darec

+0

抱歉,我没有收到,当您尝试将其链接到'/ usr/local/lib'时发生了什么? – haynar

回答

21

我试过以下内容:

我在我的机器上安装了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 .:酿造建议的步骤在这里可能没有关系,但我提出这一点,因为你看到许可问题。 You could also disable rootless mode.

+0

“sudo ls -s”不适用于我(相应地更改路径)。不幸的是,我必须在恢复模式下禁用SIP并重启。 – Marcellinov

+0

对不起,我没有得到'ls -s'位。你的意思是'ln -s'? –

+0

是的,对不起!拼写错误。 – Marcellinov

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 

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

+1

这对我来说真是棒极了保护,并在错误信息的原因(不安全使用rpath中的) – neal

+1

提起的错误,看看同意如果可以的上游固定: https://github.com/psycopg/psycopg2/issues/385 –

+0

这为我工作为好,重新安装包,擦出来的畅达env和再创造,并与'DYLD_LIBRARY_PATH'搞乱后'DYLD_FALLBACK_LIBRARY_PATH',但只有这样才行(足够令人困惑的是,我能够在'/ usr/local/lib'中使用库路径)。我仍然不确定为什么这是必要的,似乎只是在El Cap? –

7

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

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

畅达安装psycopg2

+0

请不要发表[重复答案](// meta.stackexchange.com/a/211726/206345)。相反,考虑其他行动可以帮助未来的用户找到他们需要的答案,如链接文章所述 – Mogsdad

+0

这是多余问题的结果,虽然针对同一问题提出了一百万种不同的解决方案,但这种解决方案的学术性令人难以置信,因此不切合实际。这里真正的问题是,相同的问题线程应该合并到一个单独的文章中。 – MV22

+0

这确实是其中一个选项。用户可以[标记重复帖子](http://stackoverflow.com/help/privileges/flag-posts) ,或[投票结束它们重复(http://stackoverflow.com/help/privileges/close-questions)。或者,您可以留下评论以指向另一个答案。 – Mogsdad

0

这是一个痛苦对我来说,因为我用来设置

export DYLD_FALLBACK_LIBRARY_PATH=/Library/Postgresql/9.5/lib 

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

我现在设置$ SIP_WORKAROUND_LIBRARY_PATH为相同的值,这将OSX独自离开,然后我必须做的:

export DYLD_FALLBACK_LIBRARY_PATH=$SIP_WORKAROUND_LIBRARY_PATH 
在我的测试脚本

,通过潜行的价值。这远非理想,但我希望它能帮助别人。

0

我正在运行El Capitan 10.11.5和python 3.5.1并尝试导入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/ 
1

基于@ArtHarg的解决方案,我用这与Python 3.4和PostgreSQL 9.5和OS X埃尔卡皮坦:

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 
相关问题