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


91

我试图为教程安装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等。见:stackoverflow.com/questions/20170895/...
andilabs

Answers:


104

在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吗?),您可以简单地添加“ latest”代替版本号,如下所示:

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

5
注意版本会及时更改;现在它了9.4
andilabs

1
请注意,.bash_profile如果使用标准Terminal的bash ,要始终将其应用于当前shell,则需要将此行添加到该行。如果使用,则zsh将此行追加到.zshrc文件中。所有这些都可以在主目录中找到。(just ls -la
andilabs

2
这比使用brew容易一百万倍。
Nate

现在是9.5版!考虑编辑答案以说出当前版本?
2016年

6
您可以将其替换<current_version>latest指向最新安装的Postgres版本。我的文件夹看起来像:ls /Applications/Postgres.app/Contents/Versions/它给9.5/ latest/
Raymond

96

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

brew install postgresql

在CentOS上,解决方案是安装postgresql-devel

sudo yum install postgresql-devel

pg_configpostgresql-devel包装中


11
该问题以“ virtualenv”设置开头。在这种情况下,我认为冲泡是不合适的。似乎它应该是一个纯粹的点子解决方案。
约翰·哈特2014年

psycopg是对C库的绑定,因此您必须安装C库。无法(AFAIK)将本机C库安装到virtualenvs。
企鹅布莱恩

一旦安装了postgresql C库,就可以重新运行失败的pip install命令(以上答案未明确说明)。
企鹅布莱恩

33

我完全同意约翰·海特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


3
这是此问题的最佳答案。
Vinod Sharma 2015年

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"如果您想使用最新安装的Postgres版本
jaynp

19

不要忘记虚拟环境中的$ 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


2
不过,我认为这个问题暗示着virtualenv中的“唯一实例”。我仍在寻找在virtualenv中安装pg的解决方案。
约翰·哈特2014年

你是真正的冠军,拯救了我。
哈菲兹·西迪克

10

这是我在Mac(OSX 10.9)上能够解决此问题的方法:

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

我在尝试时遇到了CLANG错误pip install psycopgLLVM 5.1问题),所以我不得不使用以下命令安装psycopg:

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

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


2
+1为我工作。不敢相信我必须为C编译器指定自定义标志才能在MacOS上设置postgres + python开发环境...
Andomar 2014年

1
该问题以“ virtualenv”设置开头。在这种情况下,我认为冲泡是不合适的。似乎它应该是一个纯粹的点子解决方案。
约翰·哈特2014年

5

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

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

  1. 在您的Shell路径(/ usr / local / pgsql / bin /)中将路径添加到pg_config

  2. 或编辑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二进制文件。


1
当然...但是您如何在virtualenv中做到这一点,而不依赖于整个系统的pg安装?
约翰·高特

4

对于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


2

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


1
可以在virtualenv中安装postgresql,而无论是否安装了postgresql,此错误通常都是路径问题。
l'l'l

1
@HolyMackerel,感谢您提供最相关的答案。关于为什么无法在virtualenv中安装psycopg2 / pg的任何详细信息?
约翰·哈特2014年

1
postgres与python无关。他们分别运行,但彼此交谈。
Bioto 2015年


1

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

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

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


1

如果您使用的是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/

1

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


0

Ubuntu上,我只需要postgres dev软件包:

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

0

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

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.