关于python:找不到Psycopg2图像

Psycopg2 image not found

尝试使用postgres mac应用设置postgres并遇到此错误,但我无法解决。 有什么想法吗?

1
2
3
    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

1
2
$ 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,它会很好地工作


我找到了一个解决类似铁路问题的解决方案。将以下内容添加到您的.bash_profile,.bash_rc或同等版本中:

1
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中添加以下两行:

1
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后,将再次设置环境变量。


在升级Postgresql之后,并在我的virtualenv中安装了psycopg2之后,这发生在我身上。重新安装(重建)对我有用。

1
2
pip uninstall psycopg2
pip install psycopg2


这个问题使我整个上午都无法解决。我发现http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/上的讨论非常有帮助。感谢Jurie的回答,针对我的问题(在Mac中)的解决方案如下:

  • 使用brew安装openssl 1.0.0:

    1
     brew install openssl
  • 使用以下命令:

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

    将1.0.1x零件替换为当前版本。对我来说是1.0.1h。

  • 希望这可以帮助!

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


    在您的bash环境中,在加载之前,请尝试以下操作:

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

    ..用系统上的版本替换" x.y"。

    ..请注意,如KindOfGuy所述,在bash个人资料中设置此设置可能会干扰其他程序。

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

    另一个替代方法是将其放入在尝试导入psycopg2之前运行的python脚本:

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

    再次..,用/ Library / PostgreSQL中系统上的版本替换'x.y'。


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

    由于某些目录上的系统锁定,其他解决方案无法(轻松)在cap capan中工作,这意味着符号链接解决方案在大多数情况下将较不易用/理想。

    留下后备变量。当前答案指向错误的目录。我猜想dylibs目录自2013年以来已更改。

    因此,这是适用于我的最新后备目录:

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


    在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

    1
    2
    $ 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

    大图,问题在于找不到所需的库。您可以使用Apple的开源编译器工具otoolinstall_name_tool来更改psycopg2查找libssl的位置。这些随OS X一起提供,并且man 提供了手册页。

    转到错误消息中提到的psycopg2模块目录。到达那里:

    1
    2
    3
    4
    $ 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更改外观:

    1
    $ 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,则为brew install openssl。)您可能还需要对libcrypto进行重复。

    根据_psycopg2.so的构建方式,执行此更改可能会失败。如果发生这种情况,您可能可以使用自定义库路径自己构建模块,但是我不会涉及。

    与将libssl 1.0.0链接到dyld的搜索路径(通过ln -s或设置DYLD_*)的方法(在此处提供其他答案)相比,这种方法的优点是更窄,因此风险更低。环境变量)。 (请在一对讨论和一些代码中查看关于这些方法的警告。了解有关dyldman dyld的更多信息。)它的缺点是需要为每个psycopg2副本重复执行。选择自己的冒险。

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


    1
    pip install psycopg2-binary

    奇迹般有效!


    我缺少了postgresql客户端软件包,所以我用brew安装了它们,从而为我解决了这个问题。

    1
    2
    3
    brew update
    brew doctor
    brew install postgresql

    我找到了适合我的解决方案

    1
    2
    3
    4
    5
    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的位置,替换此部分'/Applications/Postgres.app/Contents/Versions/9.3/'。查找安装psql的命令:which psql

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


    由于将Postgres.app(从9.3升级到9.4),我遇到了相同的错误。

    解决方案是删除pip缓存轮,因为它们指向的是Postgres.app版本9.3。

    我已经找到了相应的psycopg轮缓存文件

    1
    grep -r psycopg ~/.pip/cache

    并删除上一条命令找到的目录。


    使用psycopg2-binary代替

    1
    pip install psycopg2-binary

    我在mysql中遇到类似的问题。请求的库无法加载/usr/local/mysql/lib/libmysqlclient_r.16.dylib

    但是,在此目录中,有一个更高版本的库:
    /usr/local/mysql/lib/libmysqlclient.20.dylib

    我正在virtualenvwrapper中工作,并尝试重新安装所有以前安装的依赖项,但无济于事。任何帮助将不胜感激。


    只是想分享对我有用的东西。我在用Jupyter使用Anaconda。以下工作:

    1
     DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2k/lib  jupyter notebook

    但是后来导致了导入另一个库的问题(密谋)。在玩完pip之后,我意识到我可能应该改用conda,以下内容似乎可以解决所有问题。

    1
    conda install psycopg2

    您安装了psycopg2吗?您需要它以便将python与postgresql集成。


    对我有用的解决方案是使用" no-binary"选项集安装psycopg2,该命令告诉psycopg2使用系统libssl。

    默认情况下,psycopg2使用自己的libssl版本,并且似乎依赖于该库的旧版本,该旧版本在升级后不再存在。

    有关no-binary选项的更多详细信息,请参见psycopg2安装文档。

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

    尝试使用pip install psycopg2 --upgradepsycopg2更新到最新版本,然后重试。


    尝试找到一个或多个libssl.1.0.0.dylib文件并将其复制到您的'/ usr / local / lib /'
    对我来说,来源是'/ Library / PostgreSQL / 11 / lib /'(将版本更改为您的)
    或者,您可以将所有内容复制到" / usr / local / lib /"
    转到原点并键入:
    sudo cp * / usr / local / lib /复制所有文件。
    我找到了解决方案并将其更改为解决我的问题https://oscarvalles.wordpress.com/2017/03/24/dlopenlibrary-not-loaded-libssl-dylib-fail-to-import-psycopg2-in-virtualenv/