82

尝试使用 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
4

22 回答 22

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

于 2013-05-19T11:21:55.137 回答
47
pip install psycopg2-binary

奇迹般有效!

关于源+轮分布(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

于 2019-07-19T16:03:20.433 回答
18

在处理 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

编辑:当您尝试运行 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 后,将再次设置环境变量。

于 2013-05-24T17:28:59.660 回答
17

这发生在我升级 Postgresql 之后,以及在我的 virtualenv 中安装 psycopg2 之后。重新安装(重新构建)对我有用。

pip uninstall psycopg2
pip install psycopg2
于 2015-09-09T18:51:33.993 回答
11

这个问题花了我一上午的时间来解决。我发现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
    

    用您当前的版本替换1.0.1x部分。对我来说是 1.0.1 小时。

希望这可以帮助!

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

于 2014-07-30T17:13:49.443 回答
10

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

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

..用系统上的版本替换“xy”。

..请注意,正如 KindOfGuy 所指出的,在您的 bash 配置文件中设置它可能会干扰其他程序。

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

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

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

..再次,将“xy”替换为 /Library/PostgreSQL 中系统上的版本。

于 2013-05-06T22:48:30.260 回答
7

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

由于某些目录上的系统锁定,其他解决方案将无法(轻松)在 el capitan 中工作,这意味着符号链接解决方案对于大多数人来说将不太容易访问/理想。

这留下了回退变量。当前答案指向错误的目录。我猜 dylibs 目录自 2013 年以来发生了变化。

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

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/Versions/latest/lib:$DYLD_LIBRARY_PATH
于 2016-01-10T00:13:52.977 回答
4

在 Mac OS X 10.11 (El Capitan) 下,/usr/libroot 用户只读。你会得到一个ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted error You need to use/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
于 2016-03-12T20:07:21.873 回答
3

大局,问题是找不到所需的库。您可以使用 Apple 的开源编译器工具更改psycopg2查找位置,并且. 这些随 OS X 一起提供,手册页随.libsslotoolinstall_name_toolman <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构建方式。如果发生这种情况,您可能可以使用自定义库路径自己构建模块,但我不会深入探讨。

dyld与将 libssl 1.0.0 链接到的搜索路径(通过ln -s或设置DYLD_*环境变量)的方法(在此处的其他答案中给出)相比,这种方法具有更窄的优点,因此风险更小。(在一对讨论一些代码中查看对这些方法的警告。了解更多关于dyldthrough的信息man dyld。)它的缺点是需要对psycopg2. 选择你自己的冒险。

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

于 2015-07-04T15:30:19.327 回答
3

我遇到了一个类似的问题,我正在使用 macOS 执行pip install psycopg2-binary对我来说确实很奇怪:)

于 2021-02-24T08:00:13.133 回答
2

我发现这个解决方案对我有用

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

于 2014-10-28T13:23:02.017 回答
2

I was missing the postgresql client package, so I installed them with brew and that fixed this issue for me.

brew update
brew doctor
brew install postgresql
于 2014-11-11T17:12:13.133 回答
2

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

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

我以这种方式找到了相应的 psycopg 轮缓存文件

grep -r psycopg ~/.pip/cache

并删除了我用最后一个命令找到的目录。

于 2015-08-09T19:12:23.463 回答
2

对我有用的解决方案是安装带有“no-binary”选项集的 psycopg2,它告诉 psycopg2 使用系统 libssl。

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

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

pip uninstall psycopg2
pip install --no-binary :all: psycopg2
于 2017-08-17T16:50:12.007 回答
2

如果您正在使用虚拟环境使用 python/django

为我工作了以下版本

  • macOS Catalina 10.5.2
  • 蟒蛇3.7.3
  • Django 3.0.2
  • psycopg2==2.8.4
  • 虚拟环境 16.6.0
  • 点 19.3.1
  • postgres (PostgreSQL) 11.2

3 步解决方案

  • 删除现有的虚拟环境
  • 再次创建新的虚拟环境
  • 再次安装依赖
于 2020-01-10T09:22:04.837 回答
0

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

于 2013-05-06T22:03:38.233 回答
0

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

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

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

于 2017-03-31T18:58:21.960 回答
0

在使用postgreSQL作为 DB运行我的Django服务器时,我遇到了类似的问题。我通过以下步骤修复了它,我正在使用 conda 来处理虚拟环境。

创建一个我命名的新虚拟环境newenv

1 -conda create --name newenv

2 -conda activate newenv

3 -pip install -r requirements.txt

4 -python manage.py runserver

之后它就像一个魅力:)。

于 2021-02-03T23:30:49.510 回答
0

psycopg2-binary改为使用

pip install psycopg2-binary
于 2019-09-04T22:47:16.127 回答
0

只是想分享对我有用的东西。我将 Anaconda 与 jupyter 一起使用。以下确实有效:

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

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

conda install psycopg2
于 2017-05-16T10:55:11.080 回答
0

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

于 2018-03-06T12:22:13.747 回答
0

尝试查找文件或文件 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/

于 2019-07-04T09:37:00.997 回答