未找到Psycopg2图像

时间:2013-05-06 22:00:27

标签: python macos postgresql psycopg2

尝试使用postgres mac app设置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

22 个答案:

答案 0 :(得分:82)

$ 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

,则效果很好

答案 1 :(得分:17)

我找到了一个解决方案,在处理轨道上的类似问题时对我有用。将以下内容添加到.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后,将再次设置环境变量。

答案 2 :(得分: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
    
  2. 使用以下命令:

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

    1.0.1x 部分替换为您当前的版本。对我而言是1.0.1h。

  3. 希望这有帮助!

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

答案 3 :(得分:9)

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

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

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

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

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

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

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

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

答案 4 :(得分:9)

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

pip uninstall psycopg2
pip install psycopg2

答案 5 :(得分: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

答案 6 :(得分:3)

大图,问题是无法找到所需的库。您可以使用Apple的open source compiler toolspsycopg2libssl更改otool查找install_name_tool的位置。它们附带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的位置。我给出的示例是默认的Homebrew路径,但您可以从Anaconda和/或PostgreSQL应用程序包中获取它。 (brew install openssl如果你还没有。)你也可能需要重复使用libcrypto。

执行此更改可能会失败,具体取决于_psycopg2.so的构建方式。如果发生这种情况,您可以使用自定义库路径自行构建模块,但我不会深入研究。

这种方法的优势在于比将libssl 1.0.0链接到dyld的搜索路径(通过ln -s的方法(在其他答案中给出)更窄,因此风险更小或者设置DYLD_*环境变量)。 (请参阅pair discussionssome code中针对这些方法的警告。了解有关dyldman dyld的详情。)它的缺点是需要对psycopg2的每个副本重复。选择你自己的冒险。

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

答案 7 :(得分:2)

在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

$ 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

答案 8 :(得分:2)

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

为我工作了以下版本

  • MacOS Catalina 10.5.2
  • python 3.7.3
  • Django 3.0.2
  • psycopg2 == 2.8.4
  • virtualenv 16.6.0
  • 点19.3.1
  • postgres(PostgreSQL)11.2

3步解决方案

  • 删除现有虚拟环境
  • 再次创建新的虚拟环境
  • 再次安装依赖项

答案 9 :(得分:2)

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

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

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

grep -r psycopg ~/.pip/cache

并删除了我在上一个命令中找到的目录。

答案 10 :(得分:2)

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

brew update
brew doctor
brew install postgresql

答案 11 :(得分: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 

替换此部分&#39; /Applications/Postgres.app/Contents/Versions/9.3 /&#39;取决于计算机上安装psql的位置。用于查找psql安装位置的命令:which psql

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

答案 12 :(得分:1)

改为使用psycopg2-binary

pip install psycopg2-binary

答案 13 :(得分:1)

我在使用 macOS 执行 pip install psycopg2-binary 时遇到了类似的问题,这让我感到奇怪:)

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

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

我正在使用virtualenvwrapper并试图重新安装所有以前安装的依赖项无济于事。非常感谢任何帮助。

答案 16 :(得分:0)

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

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

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

conda install psycopg2

答案 17 :(得分:0)

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

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

有关no-binary选项的更多详细信息,请参阅psycopg2 install docs

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

答案 18 :(得分:0)

尝试使用psycopg2pip install psycopg2 --upgrade更新为最新版本,然后重试。

答案 19 :(得分: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/

答案 20 :(得分:0)

pip install psycopg2-binary

像魅力一样工作!

答案 21 :(得分:0)

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

创建一个新的虚拟环境,我将其命名为 newenv

1 - conda create --name newenv

2 - conda activate newenv

3 - pip install -r requirements.txt

4 - python manage.py runserver

之后它就像一个魅力:)