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

Can't install psycopg2 package through pip install on MacOS

我正在为我的一个讲座做一个项目,我需要下载包 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

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

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

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

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

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

  1. Install/update 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
    

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

find / -name pg_config  2>/dev/null

然后添加路径:

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

os 版本:MacOs Sierra

希望对您有所帮助。

尝试安装:

pip install psycopg2-binary

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

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"

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

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

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

pipenv install psycopg2==2.7.7

希望我有时间进一步研究这个问题,以了解到底发生了什么。但现在我没有,这很有效。

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" \
brew upgrade openssl

然后我可以安装psycopg2

我修复了它:

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

如果您不想与 brew 纠缠不清,这里是 "MacOS-only solution":

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

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

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

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

唯一对我有用的是:

pip install psycopg2==2.7.7

好吧,很多不同的选择都不适合我,但最后!

首先,试试这个:

brew reinstall openssl

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

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

nano ~/.zshrc

在末尾粘贴以下行(或根据您的 Caveats 相应地更改这些命令),请记住 Homebrew 提供的 OpenSSL 可能与系统的(我收到一条警告,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 时突然出现的(可能是最近的一些系统更新)。

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

我 运行 在 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 包。

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

brew reinstall libpq
brew reinstall openssl

如果还没有的话,也可以安装

brew info libpq
brew info openssl

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

For compilers to find openssl@3 you may need to set:

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

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

... export LDFLAGS="-L/opt/homebrew/opt/libpq/lib"

export 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