Psycopg2没有找到图片

问题描述:

试图与Postgres的Mac应用程序安装的Postgres,打这个错误,我一直没能解决。有什么想法吗?Psycopg2没有找到图片

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 

您是否安装了psycopg2?你需要它,以便将python与postgresql集成。

+0

是的,它的安装。我正在运行pyenv,可能会影响事情吗? – 2013-05-06 22:05:57

+0

我不知道,我从来没有尝试过pyenv – Ari 2013-05-06 22:10:52

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

export DYLD_LIBRARY_PATH=/Library/PostgreSQL/x.y/lib 

..replacing的“xy格式”与您的系统上的版本。

..be知道,在您的bash配置文件中设置此可以与其他程序发生冲突,因为KindOfGuy指出。

..of当然,如果你不从bash提示符运行它,你必须设置你的任何方式pyenv让你的环境。你甚至可以编辑pyenv本身并将其放置在顶部。

另一种方法是把这个你尝试导入psycopg2之前运行在python脚本:

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

..again,与您的系统在/ Library/PostgreSQL的的版本替换“xy格式”。

+0

什么都没有...虽然我检出了文件夹'/ Library/PostgreSQL/9.2 /',里面的唯一项目是一个名为'data'的锁定文件夹。我想应该有其他物品,对吧? – 2013-05-06 23:36:55

+2

从bash配置文件运行导出导致其他地方的麻烦,但我坚持'os.environ ['DYLD_LIBRARY_PATH'] ='/图书馆/ PostgreSQL/x.y/lib''进入manage.py这是一种魅力。在所有项目中仍然需要这样做,但这会帮助我,直到问题得到其他方面的排序。 – KindOfGuy 2013-05-28 13:18:56

+0

@KindOfGuy,为我工作。谢谢。最后让'postgresql'在Django中重新联机。 – 2014-03-17 04:12:29

$ 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埃尔卡皮坦你不能做这些链接,而无需禁用系统的保护,但它工作得很好,如果你链接到/ usr/local/lib目录

+2

这个答案是唯一一个为我工作的,并没有像Mercurial等其他系统搞砸了。看起来这是一个已知的问题:https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546 – 2013-05-31 18:50:43

+12

对于那些使用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' – s29 2013-08-26 00:44:28

+0

如果您已经创建了以前版本的符号链接,请务必在创建之前将其删除新的一个。 'sudo rm/usr/lib/libssl.X.X.X.dylib' 'sudo rm/usr/lib/libcrypto.X.X.X.dylib' 然后在philippinedev答案后添加新链接。 (确保在你的路径中有正确的文件版本) – Kamagatos 2013-12-02 02:46:33

我发现有交易时为我工作的解决方案类似的问题在rails上。下面添加到你的.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

编辑:看来,设置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部分更改为路径,以您的环境设置脚本。

别名命令开始基本上不影响您的当前的bash环境中的子shell。所以当它解除DYLD_FALLBACK_LIBRARY_PATH变量时,它只是暂时的。在你退出psql之后,环境变量将被重新设置。

+0

这对我来说适用于Postgres.app的v9.2.4 – keno 2013-06-08 23:54:16

+0

谢谢,在Mac OS 10.9.1和Postgres 9.2中,此工作对我来说也很顺利和完美。 – Sam 2013-12-21 17:11:25

+0

对virtualenv进行了小的调整;我将这一行添加到我的'postactivate':'export“DYLD_FALLBACK_LIBRARY_PATH =/Library/PostgreSQL/9.4/lib:$ DYLD_LIBRARY_PATH”',并且在安装时使用这个命令:'DYLD_LIBRARY_PATH =/Library/PostgreSQL/9.4/lib pip install psycopg2 ' – shapiromatron 2015-11-18 17:08:21

这个问题花了我整个上午去解决。我发现关于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. 使用BREW将OpenSSL安装1.0.0

      更换1.0.1x部分与您的当前版本。对我来说这是1.0.1h。

    希望这有助于!

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

  • +0

    执行该命令时设置DYLD_LIBRARY_PATH环境变量也适用:DYLD_LIBRARY_PATH =/usr/local/Cellar/openssl/1.0.2d_1/lib/python manage.py migrate – markonovak 2015-10-09 12:59:02

    +0

    add'export DYLD_LIBRARY_PATH =/usr/local/Cellar/openssl/** 1.0.1x **/lib'激活脚本(例如〜/ anaconda3/envs/myenv/bin/activate) – maxbellec 2016-05-30 14:29:43

    +1

    您还可以在'〜/ .bash_profile'中添加命令,并且每次都会工作必须一次又一次地输入 – 2016-10-17 08:11:06

    我取决于其中PSQL安装在您的计算机上的位置发现了这个解决方案,为我工作

    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的安装位置:which psql

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

    +0

    我很惊讶没有人提高了这一点 - 为我做了诀窍。谢谢@ mit-mehta – 2015-04-03 15:45:04

    +0

    回复:@ MitMehta的解决方案:在OSX 10.11(El Capitan)上,您不能再将文件复制到/ usr/lib。使用/ usr/local/lib。 – prefectionist 2015-12-17 20:09:02

    +0

    为什么不使用Postgres.app中可用的'latest'符号链接,并复制到/ usr/lib和/ usr/local/lib中,如下所示:sudo ln -sf /Applications/Postgres.app/Contents/Versions/latest/lib/ libssl.dylib {/ usr/lib,/ usr/local/lib}; sudo ln -sf /Applications/Postgres.app/Contents/Versions/latest/lib/libcrypto.dylib {/ usr/lib,/ usr/local/lib} – 2016-04-22 02:42:12

    我错过了PostgreSQL客户端软件包,所以我安装他们酿造,并且修复了这个问题对我来说。

    brew update 
    brew doctor 
    brew install postgresql 
    

    大图,问题是无法找到所需的库。您可以使用Apple的open source compiler toolsotoolinstall_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,当然。我给出的例子是默认的自制程序路径,但是您可以从Anaconda和/或PostgreSQL应用程序包获得它。 (brew install openssl,如果你还没有的话)。你也可能需要重复libcrypto。

    执行这一变化可能取决于_psycopg2.so是如何构建的失败。如果发生这种情况,您可以使用自定义库路径自己构建模块,但是我不会介入。

    这种方法具有可更窄,并因此较不危险,比方法的优点既可以通过ln -s联的libssl 1.0.0成dyld的搜索路径(或设置DYLD_*环境变量(在其他的答案给出这里) )。 (请参阅pairdiscussionssome code以了解有关dyldman dyld的更多信息。)它的缺点是需要对psycopg2的每个副本重复。选择你自己的冒险。

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

    +0

    非常棒!就是这样! – 2016-07-13 14:06:57

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

    解决的办法是删除PIP缓存*,因为他们指着Postgres.app版本9.3。

    我已经找到了根据psycopg轮缓存文件这样

    grep -r psycopg ~/.pip/cache 
    

    和删除我用最后的命令所在的目录。

    +1

    谢谢。删除缓存,没有别的,django执行没有问题。 – 2015-09-30 23:22:18

    这发生在我升级后PostgreSQL的,在我的virtualenv安装psycopg2后。重新安装(重新构建)为我工作。

    pip uninstall psycopg2 
    pip install psycopg2 
    
    +0

    在OS X El Capitan 10.11.3上将postgresql.app版本9.3升级到9.5后,此工作适用于我。 – bmjjr 2016-09-09 16:10:48

    +0

    这是为我工作的唯一解决方案!谢谢! – YAL 2016-11-30 18:35:29

    我在el capitan上从postgres.app 9.4升级到9.5时遇到了这个问题。

    其他的解决方案不会在埃尔卡皮坦(容易)工作,因为在某些目录系统锁定,这意味着符号链接的解决方案将是不太容易接近/适合大多数。

    这留下了回退变量。目前的答案指向错误的目录。我猜dylibs目录已经改变,因为2013年

    所以,这里是最新的后备目录为我的作品:

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

    谢谢!在问题中类似的问题是让我绝对是笨拙的,但是把Postgres的''lib'预先放在'DYLD_FALLBACK_LIBRARY_PATH'上就行了。 – 2016-03-29 16:02:32

    在Mac OS X 10.11(酋长),/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 
    

    我遇到了与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使用该系统的libssl安装psycopg2。

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

    有关无二元选项的更多详细信息,请参阅psycopg2 install docs

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

    尝试使用pip install psycopg2 --upgrade到最新版本更新psycopg2,然后再试一次。