尝试使用postgres mac应用程序设置postgres并点击此错误,这是我无法解决的。有什么想法吗?
ImportError: dlopen(/Users/Craig/pyenv/mysite/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: @executable_path/../lib/libssl.1.0.0.dylib
Referenced from: /Applications/Postgres.app/Contents/MacOS/lib/libpq.dylib
Reason: image not found
$ sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/lib
$ sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/lib
我在使用Django时遇到了这个错误。我有它使用Django == 1.3的virtualenv,但不是在Django == 1.5,我必须发出上面的命令。
在OS X El Capitan中,如果不禁用系统保护,则无法执行这些链接,但如果链接到/ usr / local / lib,则可以正常工作
我发现这个解决方案对我有用
sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libssl.1.0.0.dylib /usr/lib
sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libcrypto.1.0.0.dylib /usr/lib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib
将此部分替换为“/Applications/Postgres.app/Contents/Versions/9.3/”,具体取决于计算机上安装psql的位置。用于查找psql安装位置的命令:which psql
评论更新:在OSX 10.11(El Capitan)上,您无法再将文件复制到/ usr / lib。使用/ usr / local / lib
在Mac OS X 10.11(El Capitan)下,/usr/lib
仅供root用户使用。你会得到一个ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted error
你需要使用/usr/local/lib
而不是/usr
。
$ sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/local/lib
$ sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/local/lib
你安装了psycopg2吗?你需要它来将python与postgresql集成。
我遇到了与mysql类似的问题。请求的库是无法加载/usr/local/mysql/lib/libmysqlclient_r.16.dylib
但是,在此目录中,有一个更高版本的库:/usr/local/mysql/lib/libmysqlclient.20.dylib
我正在使用virtualenvwrapper并尝试重新安装所有以前安装的依赖项无济于事。任何帮助将不胜感激。
只想分享对我有用的东西。我正在使用带有jupyter的Anaconda。以下工作:
DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2k/lib jupyter notebook
但随后导致导入另一个库的后续问题(情节)。在玩了一下pip之后,我意识到我应该使用conda,以下似乎可以解决所有问题。
conda install psycopg2
对我有用的解决方案是安装psycopg2并设置“no-binary”选项,告诉psycopg2使用系统libssl。
默认情况下,psycopg2使用自己的libssl版本,它似乎依赖于我升级后不再存在的旧版本的库。
有关no-binary选项的更多详细信息,请参阅psycopg2 install docs。
pip uninstall psycopg2
pip install --no-binary :all: psycopg2
尝试使用psycopg2
更新pip install psycopg2 --upgrade
到最新版本,然后重试。
在轨道上处理类似问题时,我找到了一个对我有用的解决方案。将以下内容添加到.bash_profile,.bash_rc或等效内容中:
export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH
(假设您在默认位置安装了Postgres.app)。然后重新启动终端会话,然后重试。
直接导出到DYLD_LIBRARY_PATH可能会导致其他依赖它的应用程序出现严重问题,但使用回退路径可以避免这些问题。
另见:https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546
编辑:当您尝试运行psql时,似乎设置DYLD_FALLBACK_LIBRARY_PATH会导致错误。要解决此问题,您可以将以下两行添加到.bash_profile:
alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)";
这假设您正在使用bash并且.bash_profile位于您的主目录中。如果不是这种情况(或者如果您使用.bashrc或其他环境设置而不是.bash_profile),请将命令的~/.bash_profile
部分更改为环境设置脚本的路径。
别名命令基本上启动一个子shell,它不会影响您当前的bash环境。因此,当它取消设置DYLD_FALLBACK_LIBRARY_PATH变量时,它只是临时的。退出psql后,将再次设置环境变量。
这个问题花了我整个上午来解决。我发现对http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/的讨论确实很有帮助。感谢Jurie的回答,我的问题的解决方案(在Mac中)如下:
brew install openssl
export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib
用您当前的版本替换1.0.1x部分。对我来说这是1.0.1h。希望这可以帮助!
编辑:一天后,我发现每次需要连接数据库时都必须输入第二个命令,因此不能永久解决这个问题。
在加载之前,在bash环境中,试试这个:
export DYLD_LIBRARY_PATH=/Library/PostgreSQL/x.y/lib
..用你系统上的版本替换'x.y'。
..请注意,在您的bash配置文件中设置此项可能会干扰其他程序,如KindOfGuy所述。
..当然,如果您没有从bash提示符运行它,您将必须以pyenv允许的任何方式设置您的环境。 ..你甚至可以编辑pyenv本身并把它放在顶部。
另一种方法是将它放在python脚本中,该脚本在您尝试导入psycopg2之前运行:
import os
os.environ['DYLD_LIBRARY_PATH'] = '/Library/PostgreSQL/x.y/lib'
..again,用/ Library / PostgreSQL中系统上的版本替换'x.y'。
升级Postgresql之后,以及在我的virtualenv中安装psycopg2之后发生了这种情况。重新安装(重建)为我工作。
pip uninstall psycopg2
pip install psycopg2
我在el capitan上从postgres.app 9.4升级到9.5时遇到了这个问题。
由于某些目录上的系统锁定,其他解决方案在el capitan中不会(轻松)工作,这意味着符号链接解决方案对于大多数人来说将不太容易访问/理想。
这留下了后备变量。当前答案指向错误的目录。我猜自从2013年以来dylibs目录已经改变了。
所以,这是适合我的最新回退目录:
export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/Versions/latest/lib:$DYLD_LIBRARY_PATH
大局,问题是无法找到所需的库。你可以改变psycopg2
使用Apple的libssl
,open source compiler tools和otool
寻找install_name_tool
的地方。这些附带OS X,man <command>
提供手册页。
切换到错误消息中提到的psycopg2
模块目录。到达那里:
$ otool -L _psycopg.so
...
@executable_path/../lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
...
这列出了_psycopg2.so
将寻找的库。您可以使用install_name_tool
更改它的外观:
$ install_name_tool -change @executable_path/../lib/libssl.1.0.0.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib _psycopg.so
当然,你需要调整libssl.1.0.0.dylib
的位置。我给出的示例是默认的Homebrew路径,但您可以从Anaconda和/或PostgreSQL应用程序包中获取它。 (brew install openssl
,如果你还没有。)你也可能需要重复libcrypto。
执行此更改可能会失败,具体取决于_psycopg2.so
的构建方式。如果发生这种情况,您可以使用自定义库路径自行构建模块,但我不会介入。
这种方法的优点是比将libssl 1.0.0链接到dyld
的搜索路径(通过ln -s
或设置DYLD_*
环境变量)的方法(在此处给出的其他答案中)更窄,因此风险更小。 (请参阅pair和discussions的some code中针对这些方法的警告。通过dyld
了解有关man dyld
的更多信息。)它的缺点是每个psycopg2
副本都需要重复。选择自己的冒险。
免责声明:这个答案的大部分内容来自于我在一天内拼凑在一起的知识。我不是专家。
我错过了postgresql客户端软件包,所以我用brew安装它们,并为我解决了这个问题。
brew update
brew doctor
brew install postgresql
由于升级Postgres.app(从9.3到9.4),我遇到了同样的错误。
解决方案是删除pip缓存轮,因为它们指向Postgres.app版本9.3。
我已经通过这种方式找到了相应的psycopg轮盘缓存文件
grep -r psycopg ~/.pip/cache
并删除了我在上一个命令中找到的目录。