无法在 MacOS 上通过 pip install 安装 psycopg2 包

Posted

技术标签:

【中文标题】无法在 MacOS 上通过 pip install 安装 psycopg2 包【英文标题】:Can't install psycopg2 package through pip install on MacOS 【发布时间】: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

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

【问题讨论】:

【参考方案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】:

    安装/更新 Xcode 开发者工具

    xcode-select --install
    

    查询postgres路径

    find / -name pg_config  2>/dev/null
    

    安装 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 版本。 ***.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

【讨论】:

以上是关于无法在 MacOS 上通过 pip install 安装 psycopg2 包的主要内容,如果未能解决你的问题,请参考以下文章

在 MacOS 上使用 pip install 命令创建可执行文件

无法在 MacOS 10.12.4 上使用 pip 安装 mysql-python

无法在 Windows 10 上使用 pip install

MacOS Python安装which is required to install pyproject.toml-based projects解决办法

MacOS Python安装which is required to install pyproject.toml-based projects解决办法

MacOS Python安装which is required to install pyproject.toml-based projects解决办法