【问题标题】:Can't install psycopg2 package through pip install on MacOS无法在 MacOS 上通过 pip install 安装 psycopg2 包
【发布时间】:2017-02-07 15:10:39
【问题描述】:

我正在为我的一堂课做一个项目,我需要下载包 psycopg2 才能使用正在使用的 postgresql 数据库。不幸的是,当我尝试 pip install psycopg2 时,会弹出以下错误:

ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/bin/clang' failed with exit status 1
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/bin/clang' failed with exit status 1

有人知道为什么会这样吗?提前致谢!

【问题讨论】:

    标签: python macos pip psycopg2


    【解决方案1】:

    好像没有安装 openssl 包。尝试安装它并再次pip install。我不是 macos 用户,但我相信 brew 简化了该平台上的包管理。

    您可能还需要安装 Python 开发和 postgresql 开发包。

    【讨论】:

      【解决方案2】:

      我通过安装命令行工具解决了这个问题

      xcode-select --install
      

      然后通过 Homebrew 安装 openssl 并手动将我的 homebrew 安装的 openssl 链接到 pip:

      env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2
      

      在 macOS Sierra 10.12.1 上

      【讨论】:

      • xcode 安装足以让我让它工作。很好看。
      • 我在安装开发工具后也得到了它
      • 对我来说也有效,谢谢,永久解决方案是什么?
      • 也适用于 Catalina
      【解决方案3】:
      1. 安装/更新 Xcode 开发者工具

        xcode-select --install
        
      2. 查询postgres路径

        find / -name pg_config  2>/dev/null
        
      3. 安装 psycopg2,使用您在步骤 2 中获得的路径。我的是'/usr/local/Cellar/postgresql/9.5.0/bin/pg_config'

        PATH=$PATH:/usr/local/Cellar/postgresql/9.5.0/bin/ pip install psycopg2
        

      【讨论】:

        【解决方案4】:

        这对我有用(在终端上):

        find / -name pg_config  2>/dev/null
        

        然后添加路径:

        export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.5/bin/
        

        操作系统版本:MacOs Sierra

        我希望这会有所帮助。

        【讨论】:

        • 这假设您已经在您的 Mac 上安装了 Postgres.app,并且没有使用 Mac 端口、自制软件、EnterpriseDB 安装程序或其他在您的 Mac 上打包/安装您的 postgresql 服务器的方式,是吗?
        • 哦,原来的问题也是关于缺少 -lssl 库,然后是“clang”,但不是 pg_config 工具。 Clang 在 Xcode 中,另一件事在 openssl 库中。用户@zganger 有这个问题的正确答案。 (我来这里是为了寻找 pg_config 问题,所以你的回答对我有很大帮助,但这不是问题所要问的)。
        【解决方案5】:

        尝试安装它:

        pip install psycopg2-binary
        

        【讨论】:

        • 这个可以和psycopg2互换吗?
        • @pkaramol 是的
        • 确保你的 pip 也是最新的 pip install -U pip 否则你会得到像 vcvarsall.bat not found 这样的错误
        • pypi.org/project/psycopg2-binary "二进制包是开发和测试的实用选择,但在生产中建议使用从源代码构建的包。"
        【解决方案6】:

        旧的,但是对于使用 pipenv 的人,我通过查看我的依赖关系图 pipenv graph --reverse 并注意到它需要 psycopg2-binary==2.8.2 解决了这个问题。运行 pipenv install psycopg2-binary 解决了这个问题。

        【讨论】:

          【解决方案7】:
          brew install postgresql
          

          如果 postgresql 存在则运行:

          brew upgrade postgresql
          sudo pip install psycopg2
          

          在venv中:

          env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/readline/lib' pip install psycopg2==2.8.4
          

          如果你只需要使用命令pip install psycopg2导出macOSX中的路径:

          export LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib"
          

          【讨论】:

          • 这对我来说非常有效,使用 brew install 然后在我的终端中输入“env =”。然而,这完全是黑暗魔法,谁能解释为什么这是必要的以及它实际上做了什么?谢谢!有关信息,2020 年 5 月的 mac 版本是 Catalina。
          【解决方案8】:

          使用 pipenv install psycopg2 遇到类似问题:

          ld: 找不到 -lssl' 的库,' clang: 错误:链接器命令 退出代码 1 失败(使用 -v 查看调用)', " 错误: 命令 'clang' 失败,退出状态为 1", '
          ----------------------------------------------------',

          我尝试了上述所有建议,但均未奏效。几个月前,我在另一个 virtualenv 中遇到过这个问题,并记得读过一些关于这是 psycopg2 version issue 的内容。所以我尝试用 2.7.1 和 2.8.3 安装,但都失败了。不知何故,版本 2.7.7 工作:

          pipenv install psycopg2==2.7.7
          

          希望我有时间进一步调查以了解实际情况。但现在我没有,这行得通。

          【讨论】:

            【解决方案9】:
            env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" \
            brew upgrade openssl
            

            然后我可以安装psycopg2

            【讨论】:

              【解决方案10】:

              我修复了它:

              brew reinstall openssl
              
              export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
              

              【讨论】:

              • 这对我也有用,在 Catalina 上。我正在使用 Python 3.8.2 版,我有 pyenv 管理我的 Python 环境和安装。您的解决方案对我有效,但我执行了:$ python -m pip install psycopg2,而不是其他人如何使用$ pip install psycopg2,我们可能不知道我们正在使用和安装哪个解释器。这将确保我们将使用我的默认 python 解释器安装 pip,它对我来说是 3.8.2 版。
              • 该导出需要永远添加到我的 .bashrc 中吗?
              【解决方案11】:

              如果您不想与brew 纠缠不清,这里是“仅限 MacOS 的解决方案”:

              sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
              

              在此之后,pip 将很乐意从源代码安装psycopg2。适用于“Mojave”(macOS 10.14)。

              【讨论】:

                【解决方案12】:

                根据当前/todey 条件 - 唯一的解决方案是 - 卸载你的 python 3.8 或 3.9 等 并安装 ptyhon 3.7.4

                【讨论】:

                • 鉴于这个问题是在 2016 年提出的,我非常怀疑“卸载 Python 3.8/3.9 并安装 Python 3.7”是否可以解决 OP 的问题
                • 这是大错特错。我运行了@Apurva 的答案,它对我有用。我正在使用 Catalina,并且我有多个 Python 版本。 stackoverflow.com/a/58722268/3255762
                【解决方案13】:

                试试这个 -->pip install psycopg2-binary

                【讨论】:

                • 欢迎来到 Stack Overflow!请注意,您正在回答一个非常古老且已经回答的问题。这是How to Answer 的指南。
                【解决方案14】:

                唯一对我有用的是:

                pip install psycopg2==2.7.7
                

                【讨论】:

                  【解决方案15】:

                  好吧,很多不同的选择对我来说都不起作用,但最后!

                  首先,试试这个:

                  brew reinstall openssl
                  

                  在重新安装过程结束时,您将在 Caveats 部分中基本上得到以下几行,因为我使用 macOS Big Sur(11.1 版)和 zsh,所以我已将其放入 zshrc 配置文件中终端。

                  打开 zshrc 或其他特定于您系统的配置文件:

                  nano ~/.zshrc
                  

                  在末尾粘贴以下行(或根据您的警告更改这些命令),请记住 Homebrew 提供的 OpenSSL 可能与系统的 OpenSSL 冲突(I'已经收到 macOS 提供 LibreSSL 的警告)但它仍然运行良好:

                  export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"
                  export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
                  export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
                  

                  ^X并按Yes确认保存文件并退出。

                  希望您现在可以安装 psycopg2:

                  pip3 install psycopg2-binary
                  

                  我仍然不确定问题的根本原因是什么,当我尝试为我的项目重新安装 pipenv 时它突然出现(可能是最近的一些系统更新)。

                  【讨论】:

                  • 这里也一样!你的建议奏效了!非常感谢您挽救了我的一天。
                  【解决方案16】:

                  尝试安装: pip install psycopg2-binary 它有效

                  【讨论】:

                    【解决方案17】:

                    我在 macOS Big Sur (11.5.1) 和 Python 3.9.6 上遇到了同样的错误。

                    事实证明,我使用的 psycopg2(以及 pandas)版本太旧了。错误消失,pip install 升级上述软件包后开始正常工作。

                    参考:https://github.com/Azure/azure-cli/issues/12854#issuecomment-619213863

                    一般来说,如果其他人建议的解决方案没有帮助,请尝试升级麻烦的python包。

                    【讨论】:

                      【解决方案18】:

                      对于 Mac OS 11.06 BigSur M1,安装在 pyenv 下

                      brew reinstall libpq
                      brew reinstall openssl
                      

                      如果还没有,请安装

                      brew info libpq
                      brew info openssl
                      

                      从逻辑上组合 2 个导出的输出,来自

                      要让编译器找到 openssl@3,您可能需要设置:

                      导出 LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"

                      export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"

                      ... 导出 LDFLAGS="-L/opt/homebrew/opt/libpq/lib"

                      导出 CPPFLAGS="-I/opt/homebrew/opt/libpq/include"

                      进入

                      export LDFLAGS="-L/opt/homebrew/opt/libpq/lib -L/opt/homebrew/opt/openssl@3/lib"
                      export CPPFLAGS="-I/opt/homebrew/opt/libpq/include -I/opt/homebrew/opt/openssl@3/include"
                      

                      然后你可以重新安装psycopg2,强制重新编译,否则你会有this problem at runtime

                      pip uninstall psycopg2 
                      pip install psycopg2 --no-cache-dir
                      

                      【讨论】:

                        猜你喜欢
                        • 2018-09-23
                        • 1970-01-01
                        • 1970-01-01
                        • 2015-09-18
                        • 2020-04-23
                        • 2020-07-05
                        • 2020-02-11
                        • 2012-07-17
                        相关资源
                        最近更新 更多