【问题标题】:Import psycopg2 Library not loaded: libssl.1.0.0.dylib导入 psycopg2 库未加载:libssl.1.0.0.dylib
【发布时间】:2015-01-31 14:15:35
【问题描述】:

当我尝试运行命令时:

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 installation error - Library not loaded: libssl.dylib

http://joshuakehn.com/2013/10/13/Postgresapp-and-psycopg2-on-OS-X.html

Psycopg2 image not found

【问题讨论】:

  • 如果您使用 bash(OS X 上的默认 shell),将以下行添加到 ~/.bash_profileexport DYLD_FALLBACK_LIBRARY_PATH=$HOME/anaconda/lib:$DYLD_FALLBACK_LIBRARY_PATH。或者,如果您使用的是鱼壳,请将以下内容添加到您的 config.fish(通常位于 ~/.config/fish/config.fish)中:set -x DYLD_FALLBACK_LIBRARY_PATH $HOME/anaconda/lib $DYLD_FALLBACK_LIBRARY_PATH
  • 同样的问题并在这篇文章中解决:stackoverflow.com/questions/23944770/…
  • @xing-shi 是对的!请不要乱用符号链接(在其他帖子中提到过这个问题),甚至是环境变量($DYLD_FALLBACK_PATH)。在下面查看我的解决方案:stackoverflow.com/a/36872624/5076471

标签: python database postgresql python-2.7 postgresql-9.3


【解决方案1】:

不要在系统库目录中使用符号链接,而是设置 $DYLD_FALLBACK_LIBRARY_PATH 以包含 anaconda 库。例如:

export DYLD_FALLBACK_LIBRARY_PATH=$HOME/anaconda/lib/:$DYLD_FALLBACK_LIBRARY_PATH

【讨论】:

  • woo 这行得通!我认为这应该是公认的答案。另一个看起来很危险。
  • 这对我也有用!我在 Mac OS X El Capitan 上使用 anaconda python 和 psycopg2。
  • 非常感谢。在找到这个之前,至少在 stackoverflow 上打了 7 个答案。 anaconda 和 El Captain 的情况也一样。很高兴我在删除上述答案之前阅读了 cmets。
  • 我的 anaconda 文件夹不在 $HOME 所以只需注意导出命令需要反映 anaconda 文件夹位置
  • 感谢您的提示。我在这个 DYLD_FALLBACK_LIBRARY_PATH 中添加了 openssl lib 路径而不是 Conda lib (/usr/local/Cellar/openssl/1.0.2q/lib/) 并解决了我的问题。
【解决方案2】:

在 Homebrew 不允许我强制链接 openssl 之后,以下工作正常:

pip install --global-option=build_ext \
            --global-option="-I/usr/local/opt/openssl/include" \
            --global-option="-L/usr/local/opt/openssl/lib" psycopg2

(此安装在 macOS 上以 virtualenv 成功)

【讨论】:

  • 这是对我有用的解决方案,这样我就可以让 pip 知道我的 Homebrew 库在哪里。
  • 这对我也有用。我正在使用 brew 安装的 python 和 virtualenv(不是 conda)
  • 同样,也为我工作。反正有没有将这些作为默认值,所以我不必手动提供它来安装?
  • 甜蜜。我在末尾添加了“--force”。谢谢!
  • 我在很多帖子中尝试了很多答案,这就像一个魅力!
【解决方案3】:

编辑:有潜在危险,请先阅读 cmets!

在下面查看更安全的答案:https://stackoverflow.com/a/30726895/308315


我在您发布它大约一个小时后遇到了这个确切的问题,然后才弄明白。我正在使用 Mac OS X Yosemite、Python 2.7 和 Postgresql 应用程序。

似乎默认设置了一个无效的符号链接(或者我在故障排除时引入了它),要修复它首先删除不正确的链接:

$ sudo rm /usr/lib/libssl.1.0.0.dylib
$ sudo rm /usr/lib/libcrypto.1.0.0.dylib

然后重新链接它们(将 YOURUSERNAME 替换为您的 Mac 用户名。我发现使用 tab 完成每个步骤以确认目录很有帮助):

$ sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libssl.1.0.0.dylib /usr/lib
$ sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libcrypto.1.0.0.dylib /usr/lib

我相信其他解决方案对您不起作用,因为您的版本是在 anaconda 中。

【讨论】:

  • 我唯一担心的是,您现在可能会使用这些库的 anaconda 版本而不是操作系统版本,即使对于不是 python 或 anaconda 的应用程序也是如此。
  • 不要rm,只是mv。您可能会发现您实际上并没有想要在下一步中链接到的文件。
  • 不要这样做。通过这样做,你可以很容易地破坏你的系统。
  • 当您说不要这样做时,您指的是 MV 文件没有创建符号链接正确吗?
  • XL 的回答对我有用。我也会谨慎回答这个问题。
【解决方案4】:

在把我的头撞在墙上几个小时之后,这两种解决方案保证可以工作:

选项 1。 这解决了我们的问题,而不会弄乱环境变量。在你的 shell 中运行它:

brew install --upgrade openssl
brew unlink openssl && brew link openssl --force

轰隆隆!这会升级/usr/locallibssllibcrypto 的符号链接。现在import psycopg2 就像一个魅力。

选项 2. 如果出于某种原因您想在 usr/local 中维护当前的符号链接,请在您的 shell 中运行此命令:

export DYLD_FALLBACK_LIBRARY_PATH=$HOME/anaconda/lib/:$DYLD_FALLBACK_LIBRARY_PATH

只需确保将上面的 $HOME/anaconda/lib 替换为实际的 lib 路径即可。就我而言,这是$HOME/miniconda2/envs/ali/lib

这仅适用于您当前所在的 shell/bash 会话。要使更改持久化,请将 export 语句添加到您的 ~/.bash_profile~/.bashrc 文件中。

想法: IMO #1 是处理此问题的正确方法,但我留下 #2 以防有些人更喜欢使用环境变量而不是修复符号链接(例如,如果他们的软件依赖于较旧的 openssl 文件版本)。

【讨论】:

  • 在 brew 的输出建议中,我不得不将第二行更改为:
  • brew unlink openssl && brew link --overwrite openssl --force
  • 尝试解决方案 1 和 @uchuugaka 的解决方案对我来说都失败了:我在 OSX Sierra 上,当我尝试运行其中一个 brew link 命令时,我收到一个错误:Linking keg-only openssl means you may end up linking against the insecure [...]
  • 可能是自制软件的新变化。该项目更新很多。
  • #1 选项不起作用 - 警告:拒绝链接:openssl 链接仅桶装 openssl 意味着您在使用 Homebrew 的 openssl 标头时可能最终链接到不安全、已弃用的系统 OpenSSL。相反,将完整的包含/库路径传递给您的编译器,例如:-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib
【解决方案5】:

conda install psycopg 对我有用。它更新了以下软件包 以下软件包将被更新:

conda:      3.19.1-py27_0 --> 4.0.5-py27_0
openssl:    1.0.2f-0      --> 1.0.2g-0
pip:        8.0.2-py27_0  --> 8.1.0-py27_0
setuptools: 19.6.2-py27_0 --> 20.2.2-py27_0
wheel:      0.26.0-py27_1 --> 0.29.0-py27_0

【讨论】:

  • 这也适用于我。我有同样的问题,我之前用 conda pip 完成了pip install psycopg2$ which pip # //anaconda/bin/pip
【解决方案6】:

我在 Mac 上遇到了这个问题,尝试 ln -s 给了我 ln:/usr/lib/libssl.1.0.0.dylib:不允许操作 我不想弄乱我的系统。相反,对我有用的是简单地安装 psycopg2-binary : pip install psycopg2-binary

这安装了psycopg2-binary-2.8.3版本

【讨论】:

    【解决方案7】:

    关于上面 XL 的回答,我不想在我已经使用 pip 时使用 Anaconda,所以我只是给它提供了对我有用的 Postgres 库的路径(我正在使用 PostgreSQL. Mac OS 10.10 上的应用程序).​​..

    export DYLD_FALLBACK_LIBRARY_PATH=/Library/PostgreSQL/9.5/lib:$DYLD_FALLBACK_LIBRARY_PATH
    

    【讨论】:

      【解决方案8】:

      我不得不稍微改变 Scott Brennstuhl 的回答: 1. 删除损坏的符号链接:

      $ sudo rm /usr/lib/libssl.1.0.0.dylib
      $ sudo rm /usr/lib/libcrypto.1.0.0.dylib
      $ sudo rm /usr/lib/libpq.5.dylib
      
      1. 与 postgres 包含的驱动程序重新链接:
      $ sudo ln -s   /Applications/Postgres.app/Contents/Versions/9.4/lib/libssl.1.0.0.dylib /usr/lib    
      $ sudo ln -s /Applications/Postgres.app/Contents/Versions/9.4/lib/libcrypto.1.0.0.dylib /usr/lib
      $ sudo ln -s /Applications/Postgres.app/Contents/Versions/9.4/lib/libpq.5.dylib  /usr/lib
      

      【讨论】:

        【解决方案9】:

        我的设置风格与 OP 有点不同:我在 Mac 上使用 Postgres.app,并且在 virtualenv 内;但症状相似。

        对我来说,这发生在我在本地将我的 Postgres.app 从 9.3 更新到 9.5 之后,错误清楚地显示了 libssl.1.0.0.dylibpsycopg2 路径指向旧的 9.3 数据目录位置(@987654326 @ 在这个错误中引用?)。在我的ENV 中添加奇怪的东西或删除符号链接我不确定这对我的影响绝对不合适。我通过卸载然后重新安装 psycopg2 解决了它,就像我在它工作时一样 - 一点都不觉得很危险:

         # In my virtualenv
         pip uninstall psycopg2
         pip install psycopg2
        

        然后我就没事了!

        【讨论】:

        • 在我清理 pip 缓存 (pip cache purge) 后为我工作 - 缓存中的内置版本仍指向旧的 libssl 路径。
        【解决方案10】:

        执行以下操作来解决 Library not loaded:libssl.1.0.0.dylib 错误如果 /usr/local/Cellar 目录中有 openssl

        1. sudo cp /usr/local/Cellar/openssl/版本>>/lib/libssl.1.0.0.dylib /usr/lib

        2. 执行步骤 1 后,如果您仍然收到 Library not loaded:libcrypto.1.0.0.dylib 错误。执行以下操作
          sudo cp /usr/local/Cellar/openssl/版本>>/lib/libcrypto.1.0.0.dylib /usr/lib

        【讨论】:

          【解决方案11】:

          brew reinstall openssl postgres 成功了

          【讨论】:

          • 我正在使用远程 postgres 服务器,但这仍然对我有用。我想,postgres 安装更正或添加了必要的符号链接。我喜欢这个,因为我希望自制软件尽可能地管理这些库。
          【解决方案12】:

          当我将 openssl1.0.0 更新为 1.1.1d 时,我遇到了同样的问题,这解决了我的问题:

          brew upgrade postgresql
          

          【讨论】:

            【解决方案13】:

            我尝试了 pip install psycopg2 ,它给出了类似的问题。 然后我尝试了 conda install psycopg2,它奏效了! 还要确保您使用的 pip 属于 anaconda (which pip)

            【讨论】:

              【解决方案14】:

              所以首先对我来说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,如上述所有答案中所述。

              【讨论】:

                【解决方案15】:

                对我有用的解决方案(https://stackoverflow.com/a/30726895 没有)是安装 psycopg2-binary 与:pip install psycopg2-binary==2.7.6

                这是在 MacOS Mohave 上。

                【讨论】:

                  【解决方案16】:

                  我正在使用 Mac OS Sierra: 并得到这个错误:

                   Library not loaded: libssl.1.1.dylib
                  

                  我在

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

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

                   export DYLD_LIBRARY_PATH=/Library/PostgreSQL/11/lib
                  

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

                  添加行: 导出 DYLD_LIBRARY_PATH=/库/PostgreSQL//lib
                  到 ~/.bash_profile

                  【讨论】:

                    【解决方案17】:

                    简单的解决方案:这个 pip 命令会在特定位置安装一个包:

                    pip install psycopg2-binary -t PATH
                    

                    其中 PATH 是您指定的路径。

                    要对此进行测试,请将软件包安装在桌面上的文件夹中。 然后将 python 脚本放在将导入 psycopg2 的同一文件夹中。它应该与与 psycopg2 包位于同一位置的脚本一起使用。

                    评论:

                    这个原因我们需要 psycopg2-binary,根据我在网上找到的旧文档:

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

                    来源: 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 和找不到原因图像的问题。

                    设置:macOS Catalina,Python 3.7,桌面上的 PyCharm/IDLE 项目,openssl@1.1/1.1.1d

                    【讨论】:

                      【解决方案18】:

                      经过一天多的尝试,我得出了以下解决方案。

                      • brew 重新安装 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 了。

                      【讨论】:

                        【解决方案19】:

                        Homebrew 将默认的 openssl 从 v1.0 升级到 v1.1。如果您尝试使用@Scott 解决方案来升级 openssl:

                        brew install --upgrade openssl
                        brew unlink openssl && brew link openssl --force
                        

                        您可能会遇到 ssh 问题。您还需要升级 openssh。

                        brew upgrade openssh
                        

                        据此博客:https://blog.junjizhi.com/all/2019/12/17/git-fetch-libssl-error.html

                        【讨论】:

                          【解决方案20】:

                          我在运行brew upgrade 后遇到了这个问题,它将 openssl 从 1.0.0 更新到 1.1.1。这会导致问题中的错误,因为我使用的是 pyscopg 2.7.4,它被固定到 openssl@1.0。更新版本的 psycopg (>2.8) 固定到 openssl@1.1

                          因此,在这种情况下,您的选择是将您的 psycopg 版本升级到 2.8.1 或更高版本(在您的 Pipfile/Pipfile.lock 等中),或者强制 brew 通过此命令继续使用 openssl@1.0,取自 @ 987654323@:

                          brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/64555220bfbf4a25598523c2e4d3a232560eaad7/Formula/openssl.rb -f
                          

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2013-10-10
                            • 2020-05-11
                            • 2020-03-19
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2019-04-03
                            相关资源
                            最近更新 更多