没有findPsycopg2图片

试图用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

当我在rails上处理类似的问题时,我发现了一个解决scheme。 将以下内容添加到.bash_profile,.bash_rc或等效项中:

 export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH 

(假设您在默认位置安装了Postgres.app)。 然后重新启动terminal会话,然后重试。

直接导出到DYLD_LIBRARY_PATH可能会导致其他依赖于它的应用程序出现严重问题,但使用回退path可以避免这些问题。

另见: https : //github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546

编辑 :似乎设置DYLD_FALLBACK_LIBRARY_PATH导致错误,当您尝试运行psql。 要解决这个问题,可以将以下两行添加到.bash_profile中:

 alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)"; 

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

别名命令基本上启动一个不影响你当前的bash环境的子shell。 所以当它解除DYLD_FALLBACK_LIBRARY_PATHvariables时,它只是暂时的。 在你退出psql之后,环境variables将被重新设置。

这个问题花了我整个上午去解决。 我发现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 
  2. 使用以下命令:

     export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib 

    用您当前的版本replace1.0.1x部分。 对我来说是1.0.1h。

希望这可以帮助!

编辑:一天后,我发现每次需要连接到数据库时都必须input第二个命令,所以不是永久解决这个问题的方法。

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

 export DYLD_LIBRARY_PATH=/Library/PostgreSQL/xy/lib 

..用您的系统上的版本replace“xy”。

..注意,在你的bashconfiguration文件中设置这个会干扰其他程序,就像KindOfGuy指出的那样。

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

另一种方法是把它放在一个python脚本中,该脚本在你试图导入psycopg2之前运行:

 import os os.environ['DYLD_LIBRARY_PATH'] = '/Library/PostgreSQL/xy/lib' 

..again,用/ Library / PostgreSQL中的系统版本replace“xy”。

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

 pip uninstall psycopg2 pip install psycopg2 

当我从postgres.app 9.4升级到el capitan时,遇到了这个问题。

其他解决scheme在el capitan中不会(很容易)工作,因为某些目录的系统locking,这意味着符号链接解决scheme对于大多数人来说不太容易访问/理想。

这留下了回退variables。 目前的答案指向错误的目录。 我猜测自2013年以来,dylibs目录已经改变。

所以,这里是适用于我的最新的回退目录:

 export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/Versions/latest/lib:$DYLD_LIBRARY_PATH 

大图,问题是找不到所需的库。 您可以使用Apple的开源编译器工具 otoolinstall_name_tool来更改psycopg2在哪里查找libssl 。 这些附带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 。 我给出的例子是默认的自制程序path,但是您可以从Anaconda和/或PostgreSQL应用程序包获得它。 (如果你还没有brew install openssl 。)你也可能需要重复libcrypto。

执行此更改可能会失败,具体取决于_psycopg2.so构build方式。 如果发生这种情况,您可以使用自定义库path自己构build模块,但是我不会介入。

这种方法的优点在于比libssl 1.0.0连接到dyld的searchpath(通过DYLD_* ln -s或设置DYLD_*环境variables)的方法(在这里给出的其他答案中)更窄,因此风险更小, 。 (在一对 讨论和一些代码中,请参阅这些方法的警告)通过man dyld了解更多关于man dyld 。它有每个psycopg2副本需要重复的缺点。 select你自己的冒险。

免责声明:这个答案的大部分内容来自于我在一天之内拼凑起来的知识。 我不是专家。

我错过了postgresql客户端软件包,所以我安装了brew,并解决了这个问题。

 brew update brew doctor brew install postgresql 

我有同样的错误,因为升级Postgres.app(从9.3到9.4)。

解决scheme是删除点caching轮,因为它们指向Postgres.app版本9.3。

我已经find了相应的psycopg轮盘caching文件

 grep -r psycopg ~/.pip/cache 

并删除了最后一条命令find的目录。

我发现这个解决scheme为我工作

 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 

取决于您的机器上安装psql的位置,将此部分replace为“/Applications/Postgres.app/Contents/Versions/9.3/”。 命令来查找psql的安装位置: which psql

从注释更新:在OSX 10.11(El Capitan)上,您不能再将文件复制到/ usr / lib。 使用/ usr / local / lib

在Mac OS X 10.11(El Capitan)下,只有root用户才能读取/usr/lib 。 你会得到一个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 

我的解决scheme是安装psycopg2“no-binary”选项集,告诉psycopg2使用系统libssl。

默认情况下,psycopg2使用自己的libssl版本,它似乎保留了旧版本库的依赖关系,在我的升级后,这个版本不再存在。

有关no-binary选项的更多细节,请参阅psycopg2安装文档 。

 pip uninstall psycopg2 pip install --no-binary :all: psycopg2