在MacOS 10.9.5上安装Psycopg2出现错误

100

我正在尝试在我的Macbook上安装Psycopg2,但是出现了错误。我在StackOverflow上找到了很多相同的问题,但没有一个答案似乎起作用。
我正在使用:

操作系统:MacOS 10.9.5
Python版本:3.4.3

我的错误代码是:

Running setup.py egg_info for package psycopg2  Error: pg_config
executable not found.

Please add the directory containing pg_config to the PATH or specify
the full executable path with the option:

python setup.py build_ext --pg-config /path/to/pg_config build ...
 
or with the pg_config option in 'setup.cfg'.  Complete output from
command python setup.py egg_info:  running egg_info

writing pip-egg-info/psycopg2.egg-info/PKG-INFO
 
writing top-level names to
pip-egg-info/psycopg2.egg-info/top_level.txt
 
writing dependency_links to
pip-egg-info/psycopg2.egg-info/dependency_links.txt
 
warning: manifest_maker: standard file '-c' not found
 
Error: pg_config executable not found.

Please add the directory containing pg_config to the PATH or specify the full executable path with the option:
 
python setup.py build_ext --pg-config /path/to/pg_config build ...
 
or with the pg_config option in 'setup.cfg'.
 
---------------------------------------- 
Command python setup.py egg_info failed with error code 1 in
/Users/sg/build/psycopg2 Storing complete log in
/Users/sg/Library/Logs/pip.log

1
https://dev59.com/R2gu5IYBdhLWcg3wDS4G#24645416 - madzohan
27个回答

158

3
太好了。我之前使用pip install psycopg2时出现了错误,但是使用psycopg2-binary就可以了。 - Chai Ang
4
我认为这并不真正回答了所问的问题。请注意,根据软件包描述,“二进制软件包是开发和测试的实用选择,但在生产中建议使用从源代码构建的软件包”。主页进一步解释说,由于捆绑了自己的libssl二进制文件,二进制版本可能会导致段错误。 - Dustin Martin
4
这对我来说是个好答案,但是我需要修复“_library not found for -lssl_”错误,这是我如何修复的: $ export LDFLAGS="-L/usr/local/opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include" 然后执行 $ pip install psycopg2-binary - Alex
我执行了这条命令。pip install psycopg2-binary出现以下信息:Requirement already satisfied: psycopg2-binary in ./env/lib/python3.8/site-packages (2.9.3) 但是错误依然存在。 - Ged Flod
我使用了@Alex提供的出口,但随后运行了$ pip install psycopg2 - bju1046

113

您似乎没有安装Postgres,请检查如何在您的系统中安装PostgreSQL,其中一种方法是使用brew install postgresql(如果您使用homebrew- 推荐),或从postgresapp.com下载postgres应用程序,pg_config应该与Postgres一起提供,并且Psycopg2正在尝试找到它。


1
警告:postgresql-9.4.5_2已经安装,只是没有链接到终端。 - sg_sg94
你如何发现未安装Postgres是问题所在,我无法从错误信息中读取任何相关内容。 - Andrés Muñoz
1
"pg_config可执行文件"这行通常意味着Python链接到的Postgres安装未找到。 - Vaibhav Mishra
要在我的Mac上直接从Python解释器运行,这就是我需要做的。 - jsnow

60

要安装 psycopg2 ,您需要先安装服务器(我已经安装了 PostgresApp )。

手动运行命令,包括 pg_config 程序的路径在 PATH 环境变量中,在我的情况下:

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

然后运行

pip3 install psycopg2

编辑:

检查pg_config目录:

which pg_config

3
如果我在 pip install psycopg2-binary 中删除 @latest 中的 @ 符号,这个方法适用于我。 - AMG
做到了,谢谢! - Yablargo

15

现在的OSX不再包括PostgreSQL,所以您需要以某种方式安装它才能构建psycopg2模块的二进制部分。

我曾经使用过brewport。通过它们中的任何一个安装任何版本的PostgreSQL都可以使您构建该模块。

如果您以其他方式安装Postgres,则需要检查可执行文件pg_config是否在您的路径中。

您可以使用以下命令检查pg_config是否存在:

which -a pg_config
如果您已安装Postgres并且上述命令没有返回任何内容,则需要手动查找pg_config可执行文件,并使用以下命令将其包含目录添加到您的PATH中:
export PATH=/path/to/postgresql/bin/:$PATH

编辑:

如果您已经通过Homebrew安装了它,但它不在您的路径中,应检查/usr/local/bin目录是否存在于您的路径中,并在缺失时将其添加

如果该目录存在,则可以尝试使用以下命令重新链接Postgres

brew unlink postgresql && brew link postgresql

1
谢谢你的帮助。我已经通过终端安装了PostgreSQL和psycopg2。当我尝试将psycopg2添加到Pycharm解释器时,仍然出现错误提示。 - sg_sg94
你应该检查在Pycharm中使用的解释器。如果你安装了多个Python版本,你需要配置Pycharm选择正确的版本。你可以在首选项中搜索 interpreter 并编辑 Project: $projectName -> Project Interpreter 来完成配置。 - mnencia
是的,我知道。现在唯一需要知道的是如何通过pip在特定版本的Python中安装psycopg2。对于Python 2.5,它已经成功安装了。但是我需要为Python 3.4安装它。我正在使用谷歌寻找解决方案... - sg_sg94
如果您知道目标Python版本中已安装了pip,则可以简单地执行:/path/to/3.4/python /usr/bin/pip install psycopg2。如果没有安装,则可以按照pip安装说明使用所需版本运行get-pip.py - mnencia
1
谢谢,我只需要将我的路径导出到 export PATH=/Library/PostgreSQL/13/bin:$PATH,psycopg2 就成功安装了。 - Sukhchain Singh
显示剩余4条评论

11

我的问题是在VENV中使用pip安装psycopg2无法正常工作,但我发现在VENV内运行此命令可以解决问题

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

允许我将其安装在Mac上。


在我的情况下,openssl 的路径是 /usr/local/opt/openssl@1.1。当我使用了正确的路径后,它就可以工作了。export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib" export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include" - hetptis

10

如果你使用 Docker,而不想在你的主机系统中安装 postgresql, 你可以尝试使用 psycopg2-binary 包,并在容器中使用 postgresql


8
psycopg2的安装和在.py文件中的导入问题可能存在于两个方面:安装和导入。
  1. 如果psycopg2没有安装或者安装出现错误,请检查您的PostgreSQL安装、链接到PostgreSQL安装的bin文件夹中的pg_config文件,以及openssl的安装和其链接是否有问题。
  2. 如果psycopg2已经安装,但是您在.py文件中无法导入它,则问题可能在于libpq及其链接。以下步骤对我和我的团队成员在Mac OS Big Sur上安装psycopg2时有效。在开始之前,请确保已安装Xcode命令行工具。如果没有,请从Apple Developer网站安装它。下面的步骤假定您已经安装了homebrew。如果尚未安装homebrew,请进行安装。最后但并非最不重要的,这也假设您已经在系统中安装了PostgreSQL,如果没有,请安装它。不同的人有不同的喜好,但是在官方PostgreSQL网站通过Enterprise DB安装程序下载是大多数人的最佳选择。
  • 要在.zshrc文件中添加指向/Library/PostgreSQL/12/bin文件夹中的 pg_config文件的链接,使用以下命令:
    export PATH="$PATH:/Library/PostgreSQL/12/bin:$PATH"。这样你就可以与pg_config文件建立链接。如果你的PostgreSQL安装是通过其他方式进行的(例如Postgres.app或Homebrew安装),则需要在.zshrc文件中加入到该PostgreSQL安装的bin文件夹中的pg_config文件的链接,因为psycopg2依赖于它。

  • 通过Homebrew安装OpenSSL,使用以下命令brew install openssl。原因是libpq库(作为psycopg2的基础)使用openssl,而psycopg2并不直接使用它。安装完成后,请将以下命令放入您的.zshrc文件:

    • export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"
    • export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
    • export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
      通过这样做,您正在为您的目录创建必要的链接。这些命令是在安装openssl时由Homebrew建议的,并直接从那里拾取。
  • 现在来到最重要的步骤,使用brew install libpq命令安装libpq。 安装此库。 根据文档

libpq是PostgreSQL的C应用程序员接口。libpq是一组库函数,允许客户端程序向PostgreSQL后端服务器传递查询,并接收这些查询的结果。

  • 使用brew link libpq链接libpq库,如果不行,使用命令:brew link libpq --force
  • .zshrc文件中加入以下内容
    export PATH="/usr/local/opt/libpq/bin:$PATH"。这将创建所有必要的链接,以便使用libpq库。
  • 现在重启终端或使用以下命令source ~/.zshrc

  • 现在使用命令pip install psycopg2即可。即使在conda环境中工作,也可以正常使用。

    N.B. 应该避免使用pip install psycopg2-binary,因为根据psycopg2库的开发者所说

在生产中不建议使用二进制包,因为过去它们在多线程环境下表现不可靠。尽管这可能已在更近期的版本中得到修复,但我从未能够重新复现此故障。


当使用来自 https://postgresapp.com/ 的替代postgresql安装程序时,这种方法需要对我的 .zshrc 文件进行以下修改才能正常工作:export PATH="$PATH:/Applications/Postgres.app/Contents/Versions/14/bin:$PATH"export LDFLAGS="-L/Applications/Postgres.app/Contents/Versions/14/lib" export CPPFLAGS="-I/Applications/Postgres.app/Contents/Versions/14/include" - WildGoose

6
$ find / -name pg_config  2>/dev/null

/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config

$ export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.3/bin/
$ pip install psycopg2

查找 / -name pg_config 2>/dev/null 对我有用,谢谢。 - Ananda Bayu Putra Yudhistira
谢谢,这帮助我避免在其他页面上浪费更多时间。 - Zia
这个答案太被低估了... 这才是列出的问题的实际解决方案... 感谢清晰简明的解决方案.. - chief dot101

5

在我的MAC上,这个方法管用:

pip install psycopg2-binary

2
pyscopg2-binary只适用于开发环境,不应在生产环境中使用。 - JavaGeek
我收到了这条信息。Requirement already satisfied: psycopg2-binary in ./env/lib/python3.8/site-packages (2.9.3) 但错误仍然存在。请尝试运行 pip install psycopg2-binary 命令来解决问题。 - Ged Flod

4

2
请问您能否在链接之外添加一些相关的解决方案?这将使您的答案更加详细和自给自足。 - MasterAler
链接的Github问题中提到的错误与OP提到的错误有何相似之处?我正在查看Github问题,但我没有看到联系。 - cronburg
1
我真的不知道这个sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /脚本是如何连接的,也不知道为什么它能够起作用。我只是在安装psycopg2时遇到了同样的问题。如果这个解决方案对某人有帮助,我很乐意提供帮助。如果我违反了规定或政策,请告诉我,我会删除这篇文章。 - Claudio J. Cáceres
没有解释和损坏的链接... - damd

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