在 macOS 12 Monterey 上使用 venv python-3.9.9 运行 `pip-compile requirements.in` 命令时,出现了 pg_config 找不到的错误。

6

操作系统:Monterey macOS v12.0.1 Python 虚拟环境:3.9.9

requirements.in

# To update requirements.txt, run:
#
#    pip-compile requirements.in
#
# To install in localhost, run:
#
#    pip-sync requirements.txt
#

django==3.2.10  # https://www.djangoproject.com/

psycopg2-binary==2.9.2 # https://github.com/psycopg/psycopg2

在打开venv之后,我输入pip-compile requirements.in,然后出现了一堆有关pg_config未找到的错误。

这是我的asciinema:https://asciinema.org/a/sl9MqmrayLAR3rRxEul4mYaxw

我已经尝试了env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/readline/lib' pip-compile requirements.in但结果相同。

请指教。

2个回答

7

我感谢@Vishnudev和@cetver的其他两个回答。

但我尝试使用brew install安装postgresql,花费了很长时间,20分钟后仍然无法完成。

最终通过大量的搜索,我找到了解决办法。

这是我的技术规格:

  1. monterey 12.1.0
  2. Apple silicon芯片
  3. zsh终端

概念

从概念上讲,我所做的是:

  1. 安装openssl并打开与之相关的所有导出项
  2. 然后安装libpq并打开与之相关的所有导出项
  3. 最后启用python venv

以下是我所采取的步骤。有可能并不需要所有的步骤,但是由于时间有限,我将它们全部列在此处。

步骤

  1. brew install openssl
  2. 将以下内容添加到.zshrc文件中:export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"
  3. 将以下内容添加到.zshenv文件中:
export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@1.1/lib/pkgconfig"
  1. source ~/.zshrc
  2. brew install libpq
  3. 将以下内容添加到.zshrc文件中:export PATH="/opt/homebrew/opt/libpq/bin:$PATH"
  4. 将以下内容添加到.zshenv文件中:
export LDFLAGS="-L/opt/homebrew/opt/libpq/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libpq/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/libpq/lib/pkgconfig"
  1. source ~/.zshenv
  2. 打开venv环境
  3. 现在应该可以成功安装 psycopg2-binary

帮助我的链接:

  1. 关于openssl的问题
  2. 关于libpq的问题

1
我选择使用自定义脚本,而不是.zshenv,因此必须组合LDFLAGSCPPFLAGS的值(例如,export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib -L/opt/homebrew/opt/libpq/lib")才能成功安装。不需要使用PKG_CONFIG_PATH - Clinton Blackburn

1

您需要使用brew安装openssl

brew install openssl
brew install postgres       # If not installed and if required

将下面的内容复制到终端或添加到.bashrc中,全局设置环境变量。

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

如果尚未设置,您还需要设置 PostgreSQL 的路径。

export PATH=/opt/homebrew/opt/postgresql@11/bin:$PATH

请记住:将 @___ 替换为您的版本
然后继续执行 requirements.txt

为什么我必须安装Postgres?我能不安装Postgres吗?我通常使用Docker来运行我的应用程序。我只想使用pip-tools生成requirements.txt文件。 - Kim Stacks
只有在本地运行时才安装。@KimStacks - Vishnudev Krishnadas

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