导入 psycopg2 库时出现错误:libssl.1.0.0.dylib 未加载。

60

当我尝试运行命令时:

import psycopg2

我遇到了这个错误:

ImportError: dlopen(/Users/gwulfs/anaconda/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.1.0.0.dylib
  Referenced from: /Users/gwulfs/anaconda/lib/python2.7/site-packages/psycopg2/_psycopg.so
  Reason: image not found
到目前为止,我已经尝试了brew install openssl并参考了以下链接(但没有成功):psycopg2安装错误-库未加载:libssl.dylibPostgresapp和psycopg2在OS X上的安装Psycopg2未找到图像

4
如果您使用的是bash(OS X上的默认shell),请将以下行添加到〜/ .bash_profile中:export DYLD_FALLBACK_LIBRARY_PATH=$HOME/anaconda/lib:$DYLD_FALLBACK_LIBRARY_PATH。或者,如果您使用的是fish shell,请将以下内容添加到您的config.fish中(通常位于〜/ .config / fish / config.fish):set -x DYLD_FALLBACK_LIBRARY_PATH $HOME/anaconda/lib $DYLD_FALLBACK_LIBRARY_PATH - Answeror
2
同样的问题在这篇文章中得到了解决:https://dev59.com/N2Ag5IYBdhLWcg3wI4AR#23945292 - Xing Shi
@xing-shi是正确的!请不要搞混符号链接(在其他帖子中提到过这个问题),甚至环境变量($DYLD_FALLBACK_PATH)。请查看下面我的解决方案:https://dev59.com/-14d5IYBdhLWcg3wCOuD#36872624 - alichaudry
22个回答

3

brew reinstall openssl postgres 对我有用


我正在使用远程的Postgres服务器,但这对我仍然起到了作用。我想Postgres安装程序会纠正或添加必要的符号链接。我喜欢这样做,因为我希望Homebrew尽可能地管理这些库。 - dbenton

3

首先,对于我来说,openssl 的重新安装从未奏效。所有上述的解答都没能帮到我,这相当令人恼火。为了确保是openssl的问题,首先使用pip安装psycopg2-binary

  pip install psycopg2-binary

在安装完psycopg2-binary之后,如果出现像ld: library not found for -lssl 这样的错误,则按照以下步骤操作。
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"

如果这些方法都没用,您可以尝试升级 psycopg2,然后重新检查问题是否仍存在。

  pip install psycopg2 --upgrade

如果以上所有方法都没有成功,那么只有尝试按照以上所有答案中提到的方式重新安装 openssl

3

当我将openssl1.0.0更新到1.1.1d时,我遇到了同样的问题,以下操作解决了我的问题:

brew upgrade postgresql

2

我尝试了pip install psycopg2,但出现了类似的问题。 然后我尝试了conda install psycopg2,这个方法可行! 还要确保使用的pip属于anaconda(输入which pip查看)。


1
简单的解决方案:使用此pip命令可以将软件包安装到特定位置:
pip install psycopg2-binary -t PATH

其中PATH是您指定的路径。

为了测试这个,将包安装在桌面上的一个文件夹中。 然后在同一文件夹中放置一个导入psycopg2的python脚本。它应该能够在与psycopg2包相同的位置工作。

注释:

我在网上找到的旧文档中提到我们需要psycopg2-binary的原因是:

"二进制包带有它们自己版本的一些C库,其中包括libpq和libssl,无论客户端上可用的其他库如何,都将使用它们:升级系统库不会升级psycopg2使用的库。如果您想要维护二进制可升级性,请从源代码构建psycopg2。"

Source: https://access.crunchydata.com/documentation/psycopg2/2.7.3/install.html#install-from-source

我意识到问题在于需要引用Python的网站包目录。 在我的计算机上,此目录的位置是:
/Users/my_name/Library/Python/3.7/lib/python/site-packages

现在,如果您想像我一样使用IDLE或PyCharm,则需要将psycopg2-binary的安装目标定位到此站点目录。此外,在安装psycopg2-binary后,您会发现出现了两个文件夹:psycopg2、psycopg2_binary-2.8.4.dist-info。
我花了很长时间研究这个问题。其他方法都无法解决上述关于lib ssl和reason image not found的问题。
设置:macOS Catalina,Python 3.7,桌面上的PyCharm/IDLE项目,openssl@1.1/1.1.1d。

1

1
我正在使用Mac OS Sierra,出现了以下错误:

 Library not loaded: libssl.1.1.dylib

我在这个库中找到了。
 /Library/PostgreSQL/11/lib

我在互联网上找到了这个解决方案:

 export DYLD_LIBRARY_PATH=/Library/PostgreSQL/11/lib

但这不是一个永久的解决方案。因为我每次重新启动服务器时都需要运行上述命令。

将以下行添加到~/.bash_profile中: export DYLD_LIBRARY_PATH=/Library/PostgreSQL//lib


0

尝试了一整天后,我找到了以下解决方案。

  • brew reinstall openssl@1.0
  • 禁用csrutil -> 搜索如何禁用它,以便我们可以将某些内容复制到 /usr/lib
  • 将 libssl.1.0.0.dylib 复制到 /usr/lib 我使用了 sudo cp /usr/local/Cellar/openssl/1.0.2s/lib/libssl.1.0.0.dylib /usr/lib
  • 将 libcrypto.1.0.0.dylib 复制到 /usr/lib 我使用了 sudo cp /usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.1.0.0.dylib /usr/lib

同样,如果您遇到Library not loaded: libssl.1.0.0.dylib的问题, 只需将openssl的版本从1.0更改为1.1,并将libssl.1.1复制而不是libssl.1.0和libcrypto.1.1复制而不是libcrypto.1.0.0

完成了,您现在可以在Mac上享受psycopg2了。


0

0
我曾经遇到过这个帖子中最初发布的问题。我追溯到了一个与libpq有关的问题。对我来说,解决方案是运行 brew install postgresql
之后psycopg2就像一阵微风一样工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接