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 版!考虑编辑答案以说出当前版本?
您可以将<current_version>
替换为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_config
在postgresql-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