未找到Psycopg2图像

Cra*_*non 58 python postgresql macos psycopg2

尝试使用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
Run Code Online (Sandbox Code Playgroud)

小智 83

$ 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
Run Code Online (Sandbox Code Playgroud)

我在使用Django时遇到了这个错误.我有它使用Django == 1.3的virtualenv,但不是在Django == 1.5,我必须发出上面的命令.

在OS X El Capitan中,如果不禁用系统保护,则无法执行这些链接,但如果链接到/ usr/local/lib,则可以正常工作

  • 对于那些使用Heroku的Postgres.app的人 - "sudo ln -s /Applications/Postgres.app/Contents/MacOS/lib/libssl.1.0.0.dylib/usr/lib``sudo ln -s/Applications/Postgres.app/Contents/MacOS/lib/libcrypto.1.0.0.dylib/usr/lib` (12认同)
  • 我将符号链接到`/ usr/local/lib`只是因为它比`/ usr/lib`更安全,更不容易弄乱系统.也适用. (8认同)
  • @ JoeShaw的评论在OS X El Capitan中是强制性的.你会得到一个`ln:/usr/lib/libssl.1.0.0.dylib:Operation not allowed`错误.这是由于"无根"模式.更多信息:http://apple.stackexchange.com/questions/196224/unix-ln-s-command-not-permitted-in-osx-el-capitan-beta3 (4认同)
  • 这个答案是唯一一个对我有用但没有搞砸其他系统如Mercurial等的答案.看起来这是一个众所周知的问题:https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546 (2认同)
  • 可以确认`sudo ln -s /Applications/Postgres.app/Contents/Versions/9.5/lib/libcrypto.1.0.0.dylib /usr/local/lib; sudo ln -s /Applications/Postgres.app/Contents/Versions/9.5/lib/libssl.1.0.0.dylib /usr/local/lib` 适用于 9.5 Postgres.app (2认同)

vin*_*dar 44

pip install psycopg2-binary
Run Code Online (Sandbox Code Playgroud)

奇迹般有效!

关于源+轮分发(pyscopg2)与单独的二进制分发(psycopg2-binary)的讨论:https ://www.postgresql.org/message-id/CA%2Bmi_8bd6kJHLTGkuyHSnqcgDrJ1uHgQWvXCKQFD3tPQBUa2Bw%40mail.gmail.com

关于发布psycopg2-binary的决定说明:http : //initd.org/psycopg/articles/2018/02/08/psycopg-274-released/

但是,有报告称 psycopg2-binary 不满足 psycopg2 依赖性。更多讨论在这里:https : //github.com/psycopg/psycopg2/issues/674

  • 当用现有答案回答旧问题时,解释一下您的答案与现有答案的不同之处很有用。对于非常老的问题,指示答案是否依赖于较新版本的软件也很有用。 (2认同)

ste*_*wne 18

在轨道上处理类似问题时,我找到了一个对我有用的解决方案.将以下内容添加到.bash_profile,.bash_rc或等效内容中:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

(假设您在默认位置安装了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)";
Run Code Online (Sandbox Code Playgroud)

这假设您正在使用bash并且.bash_profile位于您的主目录中.如果不是这种情况(或者如果您使用.bashrc或其他环境设置而不是.bash_profile)~/.bash_profile,请将命令的一部分更改为环境设置脚本的路径.

别名命令基本上启动一个子shell,它不会影响您当前的bash环境.因此,当它取消设置DYLD_FALLBACK_LIBRARY_PATH变量时,它只是临时的.退出psql后,将再次设置环境变量.


jde*_*eng 10

这个问题花了我整个上午来解决.我发现http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/上的讨论非常有用.感谢Jurie的回答,我的问题的解决方案(在Mac中)如下:

  1. 使用brew安装openssl 1.0.0:

     brew install openssl
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用以下命令:

    export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib
    
    Run Code Online (Sandbox Code Playgroud)

    用您当前的版本替换1.0.1x部分.对我来说这是1.0.1h.

希望这可以帮助!

编辑:一天后,我发现每次需要连接数据库时都必须输入第二个命令,因此不能永久解决这个问题.


小智 10

升级Postgresql之后,以及在我的virtualenv中安装psycopg2之后发生了这种情况.重新安装(重建)为我工作.

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


Mr.*_*. B 9

在加载之前,在bash环境中,试试这个:

export DYLD_LIBRARY_PATH=/Library/PostgreSQL/x.y/lib
Run Code Online (Sandbox Code Playgroud)

..用你系统上的版本替换'xy'.

..请注意,在您的bash配置文件中设置此项可能会干扰其他程序,如KindOfGuy所述.

..当然,如果您没有从bash提示符运行它,您将必须以pyenv允许的任何方式设置您的环境...你甚至可以编辑pyenv本身并把它放在顶部.

另一种方法是将它放在python脚本中,该脚本在您尝试导入psycopg2之前运行:

import os
os.environ['DYLD_LIBRARY_PATH'] = '/Library/PostgreSQL/x.y/lib'
Run Code Online (Sandbox Code Playgroud)

..again,用/ Library/PostgreSQL中系统上的版本替换'xy'.

  • 从bash配置文件中运行导出会在其他地方引起麻烦,但我把`os.environ ['DYLD_LIBRARY_PATH'] ='/ Library/PostgreSQL/xy/lib'`放到manage.py中,这有点魅力.仍然需要在所有项目中执行此操作,但这将帮助我,直到问题以其他方式排序. (2认同)

Myk*_*kel 6

我在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
Run Code Online (Sandbox Code Playgroud)


小智 0

你安装psycopg2了吗?您需要它才能将 python 与 postgresql 集成。