Mac + virtualenv + pip + postgresql = 错误:找不到 pg_config 可执行文件

Posted

技术标签:

【中文标题】Mac + virtualenv + pip + postgresql = 错误:找不到 pg_config 可执行文件【英文标题】:Mac + virtualenv + pip + postgresql = Error: pg_config executable not found 【发布时间】:2013-12-08 20:52:52 【问题描述】:

我试图为教程安装 postgres,但 pip 给了我错误:

pip install psycopg

我得到的错误片段:

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'.

pg_config 在我的 virtualenv 中在哪里?如何配置它?我使用 virtualenv 是因为我不想在系统范围内安装 postgres。

【问题讨论】:

我是唯一一个提供了相关答案的人,他提供了如何使用 virtualenv 处理它并且没有错过 brew 等。请参阅:***.com/questions/20170895/… 【参考方案1】:

在 Mac 上,如果您使用 Postgres.app,则 pg_config 文件位于您的 /Applications/Postgres.app/Contents/Versions/<current_version>/bin 目录中。这需要添加到您的系统路径以修复此错误,如下所示:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/<current_version>/bin

例如,如果当前 Postgres.app 版本是 9.5,则此导出行将是:

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

对于更新版本的 Postgres.app (> 9.5?),您可以简单地添加“最新”来代替版本号,如下所示:

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

【讨论】:

注意版本会及时变化;现在是9.4 请注意,如果使用标准终端的 bash,要将其始终应用于当前 shell 需要将此行添加到 .bash_profile。如果使用zsh 将此行附加到.zshrc 文件。所有这些你都可以在你的主目录中找到。 (只是ls -la 这比使用 brew 简单一百万倍。 现在是 9.5 版!考虑编辑答案以说出当前版本? 您可以将&lt;current_version&gt; 替换为latest,它指向最新安装的Postgres 版本。我的文件夹看起来像:ls /Applications/Postgres.app/Contents/Versions/ 它给了9.5/ latest/【参考方案2】:

在Mac上,解决方法是安装postgresql

brew install postgresql

在CentOS上,解决办法是安装postgresql-devel

sudo yum install postgresql-devel

pg_configpostgresql-devel 包中

【讨论】:

问题以“virtualenv”设置开头。我不相信 brew 在这种情况下是合适的。似乎它应该是一个纯粹的 pip 解决方案。 psycopg 是与 C 库的绑定,因此您必须安装 C 库。无法(AFAIK)将本机 C 库安装到 virtualenvs 中。 安装 postgresql C 库后,您可以重新运行失败的 pip install 命令(上述答案并未明确说明)。【参考方案3】:

我完全同意john hight 的观点,即假设 OP 完全指定了使用 virtualenv 的需要,大多数发布的答案都是完全偏离主题的。

对我来说,答案是在激活 virtualenv 时在提示符下运行以下命令:

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

(请注意,第 9.4 部分代表版本,可能会有所不同)

或者如果您想使用最新安装的 Postgres 版本:

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

然后:

pip install psycopg2

假设你已经安装了 postgres 成功。如果没有,请记住最好和推荐的解决方案是使用:Postgres.app

【讨论】:

这是这个问题的最佳答案。 export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH" 如果你想使用最新安装的 Postgres 版本【参考方案4】:

不要忘记您在虚拟环境中的 $PATH 变量!= 您的全局 $PATH 变量。你可以在你的 virtualenv 和一个新的 shell 中使用 'echo $PATH' 来确认这一点。因此,除非您想将 PostgreSQL 作为虚拟环境中的唯一实例安装(不值得做的事情,imo),否则您需要修改 virtualenv 中的 $PATH 变量以包含全局安装的路径(这将解决您丢失的 pg_config 错误)。

步骤如下:

1.) 在新的 shell 中,输入“which pg_config”。这将返回路径。复制它。就我而言,路径如下所示:/Applications/Postgres.app/Contents/Versions/9.3/bin

2.) 回到你的 virtualenv shell,输入'export PATH=/your-path-to-pg_config:$PATH'

3.) 然后,仍然在 virtualenv 中,'pip install psycopg2'

如果一切按计划进行,这将在虚拟环境中安装 psycopg2,但安装将参考您的 Global PostgreSQL 安装。就我而言,这个全局安装是通过 Postgres.App 安装的,因此是路径。我更喜欢这种使用 psycopg2 的方法,因为这意味着我可以在任何 virtualenv 中轻松使用数据库,而不仅仅是在定义的虚拟环境中。

希望这对来到这里的人有所帮助。对于 Google 果汁,这是您遇到此问题时返回的显式(和模糊)错误语言: 命令 python setup.py egg_info 失败,错误代码 1

【讨论】:

不过,我认为这个问题暗示了一个“内部的唯一实例”virtualenv。我仍在寻找在 virtualenv 中安装 pg 的解决方案。 你是真正的冠军,拯救了我的一天。【参考方案5】:

以下是我在 Mac (OSX 10.9) 上解决此问题的方法:

brew update
brew install --force ossp-uuid
brew install postgresql
pip install psycopg

我在尝试pip install psycopg(LLVM 5.1 issue)时遇到了 CLANG 错误,因此我不得不使用以下命令安装 psycopg:

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg

它类似于Mingyu's 的解决方案,但有足够的差异,我认为值得分享。

【讨论】:

+1 为我工作。不敢相信我必须为 C 编译器指定自定义标志才能在 MacOS 上设置 postgres+python 开发环境... 问题以“virtualenv”设置开头。我不相信 brew 在这种情况下是合适的。似乎它应该是一个纯粹的 pip 解决方案。【参考方案6】:

你必须配置路径postgresql:

export PATH=$PATH:/Library/PostgreSQL/11/bin

之后,您必须安装要求:

pip3 install -r requirements

【讨论】:

【参考方案7】:

对于OS X El Capitan (10.11.6) + brew + virtualenv + PostgreSQL 9.5

安装后PostgreSQL 9.5:

brew install postgresql@9.5

然后,打开你的终端并执行:

export PATH=$PATH:/usr/local/opt/postgresql\@9.5/bin/
pip install psycopg2

【讨论】:

【参考方案8】:

当构建工具找不到 Postgresql 库时会导致此错误。

通常需要指导 psycopg2 如何找到 pg_config 二进制文件,您可以:

    在你的 shell 路径 (/usr/local/pgsql/bin/) 中添加 pg_config 的路径

    或编辑 psycopg2 源文件夹中的 setup.cfg 文件并提供 以 pg_config=

    开头的行上 pg_config 的完整路径

pg_config=/usr/local/pgsql/bin/pg_config

以上是一个示例,您可以通过locate pg_config 查找它所在的位置,或者只需输入which pg_config,它就会告诉您路径。

错误通常来自系统上未安装 postgresql。如果是这样,请下载并构建 postgres,或为 OS X 下载预构建的 psycopg2 二进制文件。

【讨论】:

当然......但是你如何在 virtualenv 中做到这一点,而不是依赖于系统范围的 pg 安装?【参考方案9】:

virtualenv 用于 python 包。我认为您不能在 virtualenv 中包含 postgres。您看到的错误消息可能是因为您尚未安装 postgres。 psycopg2 安装脚本正在寻找 postgres 文件(在本例中为 pg_config),但没有找到它们,因为它没有安装。无法使用 pip 或 virtualenv 安装 postgres。

【讨论】:

可以在 virtualenv 中安装 postgresql,而且这个错误通常是一个路径问题,无论是否安装了 postgresql。 @HolyMackerel,感谢您提供最相关的答案。关于为什么不能在 virtualenv 中安装 psycopg2/pg 的任何详细信息? postgres 与 python 无关。他们分开运行,但互相交谈。【参考方案10】:

在 Windows 上,我从 http://www.enterprisedb.com/products-services-training/pgdownload#windows 手动安装了 postgres。 之后,相同的命令起作用。

【讨论】:

【参考方案11】:

除了@bkev 和@andi 提供的答案,根据 Postgres.app 上的documentation,您应该在 Mac 上的 bash_profile 中添加以下内容:

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

请注意,没有硬编码的版本号。我想将此作为评论添加到上述答案中,但我没有足够的代表。

【讨论】:

【参考方案12】:

如果您使用的是 postgresql 9.4,该文件位于

/usr/pgsql-9.4/bin/pg_config

包的名字是

postgresql94-9.4.9-1PGDG.rhel6.x86_64

要将 pg_config 添加到您的 PATH,请执行以下操作

PATH=$PATH:/usr/pgsql-9.4/bin/

【讨论】:

【参考方案13】:

如果您不必专门使用psycopg 驱动程序,请切换到pg8000 驱动程序。它是纯 Python 并且不那么挑剔。

【讨论】:

【参考方案14】:

Ubuntu 上,我只需要 postgres 开发包:

sudo apt-get install postgresql-server-dev-all

【讨论】:

【参考方案15】:

我的位于 /Library/PostgreSQL/9.4/bin

export PATH=$PATH:/Library/PostgreSQL/9.4/bin

【讨论】:

以上是关于Mac + virtualenv + pip + postgresql = 错误:找不到 pg_config 可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

Mac 升级Python遇到Anaconda的冲突解决,以及pip/virtualenv升级

mac 下pip安装python三方库的时候提示 Could not fetch URL https://pypi.python.org/simple/virtualenv/: There was a

如何操作virtualenv

三步教你在MAC上面设置python虚拟环境——virtualenv & virtualenvwrappe

virtualenv mac安装

Mac OS X 中的 virtualenv 问题