Mac + virtualenv + pip + postgresql = Error: ejecutable pg_config no encontrado

91

Estaba intentando instalar postgres para un tutorial, pero pipme da un error:

pip install psycopg

Un fragmento de error me sale:

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

¿Dónde está pg_configmi virtualenv? ¿Cómo configurarlo? Estoy usando virtualenv porque no quiero una instalación de postgres en todo el sistema.

KGo
fuente
Soy el único que proporcionó una respuesta relevante sobre cómo lidiar con esto usando virtualenv y sin fallar con brew, etc. Ver: stackoverflow.com/questions/20170895/…
andilabs

Respuestas:

105

En Mac, si está usando Postgres.app , el archivo pg_config está en su /Applications/Postgres.app/Contents/Versions/<current_version>/bindirectorio. Eso deberá agregarse a la ruta de su sistema para corregir este error, como este:

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

Entonces, por ejemplo, si la versión actual de Postgres.app es 9.5, esta línea de exportación sería:

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

Con versiones más recientes de Postgres.app (> 9.5?), Simplemente puede agregar "más reciente" en lugar del número de versión, así:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
bkev
fuente
5
tenga en cuenta que la versión cambiará con el tiempo; ahora es9.4
andilabs
1
tenga en cuenta que para que se aplique siempre al shell actual se requiere agregar esta línea .bash_profilesi se usa el bash estándar de Terminal. SI usa, zshagregue esta línea al .zshrcarchivo. Todo esto lo encontrarás en tu directorio de inicio. (solo ls -la)
andilabs
2
Esto fue aproximadamente un millón de veces más fácil que usar brebaje.
Nate
¡ahora es la versión 9.5! considerar editar la respuesta para decir la versión actual?
AZhao
6
puede reemplazar <current_version>con latestqué apunta a la última versión instalada de Postgres. Mi carpeta se ve así: ls /Applications/Postgres.app/Contents/Versions/y da9.5/ latest/
Raymond
96

En Mac, la solución es instalar postgresql:

brew install postgresql

En CentOS, la solución es instalar postgresql-devel:

sudo yum install postgresql-devel

pg_configestá en el postgresql-develpaquete

Mingyu
fuente
12
La pregunta comienza con una configuración "virtualenv". No creo que la preparación sea apropiada en este caso. Parece que debería ser una solución pura de pepitas.
John Hight
psycopg es un enlace a la biblioteca C, por lo que deberá tener instalada la biblioteca C. No es posible (AFAIK) instalar bibliotecas C nativas en virtualenvs.
Penguin Brian
Una vez que haya instalado las bibliotecas postgresql C, puede volver a ejecutar el comando de instalación de pip que falla (esto no quedó claro en la respuesta anterior).
Penguin Brian
33

Estoy totalmente de acuerdo con john hight en que la mayoría de las respuestas publicadas son totalmente fuera de tema, asumiendo que el OP especificó exactamente la necesidad de usar virtualenv .

Para mí, la respuesta fue ejecutar el siguiente comando en el símbolo del sistema mientras tenía activado virtualenv:

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

(observe que la parte 9.4 significa versión y puede variar)

o si desea utilizar la última versión instalada de Postgres:

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

y entonces:

pip install psycopg2

va con éxito asumiendo que ha instalado postgres. Y si no es así, recuerda que la mejor y recomendada solución es usar: Postgres.app

andilabs
fuente
3
Esta es la mejor respuesta para esta pregunta.
Vinod Sharma
3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"si desea utilizar la última versión instalada de Postgres
jaynp
19

¡No olvide que su variable $ PATH en el entorno virtual! = Su variable $ PATH global. Puede confirmar esto con 'echo $ PATH' en su virtualenv y también en un nuevo shell. Por lo tanto, a menos que desee instalar PostgreSQL como una instancia única dentro de su entorno virtual (no es algo que valga la pena hacer, en mi opinión), deberá modificar la variable $ PATH dentro de virtualenv para incluir la ruta a su instalación global (que resuelva su error pg_config faltante).

Estos son los pasos:

1.) En un nuevo shell, escriba 'which pg_config'. Esto devolverá el camino. Cópialo. En mi caso, la ruta se veía así: /Applications/Postgres.app/Contents/Versions/9.3/bin

2.) De vuelta en su shell virtualenv, escriba 'export PATH = / your-path-to-pg_config: $ PATH'

3.) Luego, todavía dentro del virtualenv, 'pip install psycopg2'

Si todo va según lo planeado, esto instalará psycopg2 dentro del entorno virtual, pero la instalación se referirá a su instalación Global PostgreSQL. En mi caso, esta instalación global se instaló a través de Postgres.App, de ahí la ruta. Prefiero este método de trabajar con psycopg2, ya que significa que puedo usar la base de datos fácilmente dentro de cualquier virtualenv en lugar de solo dentro del entorno virtual definido.

Espero que esto ayude a cualquiera que llegue aquí. Para Google juice, aquí está el lenguaje de error explícito (y vago) que se muestra cuando se encuentra con este problema: El
comando python setup.py egg_info falló con el código de error 1

Kevin Dalias
fuente
2
Aún así, creo que la pregunta implica una "instancia única dentro de" virtualenv. Todavía estoy buscando una solución que instale pg dentro de virtualenv.
John Hight
Eres el verdadero campeón y me salvaste el día.
Hafiz Siddiq
10

Así es como pude resolver este problema en mi Mac (OSX 10.9):

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

Recibí un error CLANG cuando lo intenté pip install psycopg(un problema LLVM 5.1 ), así que tuve que instalar psycopg con este comando en su lugar:

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

Es similar a la solución de Mingyu , pero hay suficientes diferencias que pensé que valía la pena compartir.

mrgnw
fuente
2
+1 funcionó para mí. No puedo creer que tenga que especificar un indicador personalizado para un compilador de C para configurar un entorno de desarrollo postgres + python en MacOS ...
Andomar
1
La pregunta comienza con una configuración "virtualenv". No creo que la preparación sea apropiada en este caso. Parece que debería ser una solución pura de pepitas.
John Hight
5

Este error se produce cuando las herramientas de compilación no pueden encontrar las bibliotecas de Postgresql.

A menudo es necesario indicar a psycopg2 cómo encontrar el binario pg_config, puede:

  1. agregue la ruta a pg_config en su ruta de shell (/ usr / local / pgsql / bin /)

  2. o edite el archivo setup.cfg en la carpeta fuente de psycopg2 y proporcione la ruta completa a pg_config en la línea que comienza con pg_config =

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

  • Lo anterior es un ejemplo, puede hacer locate pg_configpara averiguar dónde reside, o simplemente escribir which pg_configy debería indicarle la ruta.

Con menos frecuencia, el error proviene de no tener postgresql instalado en su sistema. Si es así, descargue y compile postgres, o descargue un binario psycopg2 prediseñado para OS X.

l'l'l
fuente
1
Seguro ... pero ¿cómo se hace esto dentro de un virtualenv y no depender de una instalación de pg en todo el sistema?
John Hight
4

Para OS X El Capitan (10.11.6)+ brew+ virtualenv+ PostgreSQL 9.5:

Después de instalar PostgreSQL 9.5:

brew install postgresql@9.5

Luego, abre tu terminal y ejecuta:

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

debes configurar la ruta postgresql:

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

después, debe instalar los requisitos:

pip3 install -r requirements
Diego Santa Cruz Mendezú
fuente
2

virtualenv es para paquetes de Python. No creo que puedas contener postgres dentro de un virtualenv. El mensaje de error que está viendo es probablemente porque aún no ha instalado Postgres. El script de instalación de psycopg2 busca archivos de postgres (en este caso pg_config) y no los encuentra porque no está instalado. postgres no se puede instalar usando pip o virtualenv.

Caballa Santa
fuente
1
es posible instalar postgresql en un virtualenv y, a menudo, este error es un problema de ruta, independientemente de la instalación de postgresql.
l'L'l
1
@HolyMackerel, gracias por la respuesta más relevante. ¿Algún detalle que ofrecer sobre por qué no puede instalar psycopg2 / pg dentro de virtualenv?
John Hight
1
postgres no tiene nada que ver con Python. Corren por separado pero se comunican entre sí.
Bioto
1

Además de las respuestas proporcionadas por @bkev y @andi, de acuerdo con la documentación de Postgres.app, debe agregar lo siguiente a su bash_profile en Mac:

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

Tenga en cuenta que no hay un número de versión codificado. Quería agregar esto como un comentario a las respuestas anteriores, pero no tengo suficiente representante para esto.

Turgut Sarıçam
fuente
1

Si está utilizando postgresql 9.4, el archivo se encuentra en

/usr/pgsql-9.4/bin/pg_config

El nombre del paquete es

postgresql94-9.4.9-1PGDG.rhel6.x86_64

para agregar pg_config a su RUTA, haga lo siguiente

PATH=$PATH:/usr/pgsql-9.4/bin/
Ahmed
fuente
1

Si no tiene que usar el psycopgcontrolador específicamente, cambie al pg8000controlador. Es Python puro y menos quisquilloso.

Chris Johnson
fuente
0

En Ubuntu solo necesitaba el paquete de desarrollo de postgres:

sudo apt-get install postgresql-server-dev-all
marcanuy
fuente
0

El mío estaba ubicado en /Library/PostgreSQL/9.4/bin

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