Mac + virtualenv + pip + postgresql = Erreur: exécutable pg_config introuvable


92

J'essayais d'installer postgres pour un tutoriel, mais pipme donne une erreur:

pip install psycopg

Un extrait d'erreur que je reçois:

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

Où est pg_configmon virtualenv? Comment le configurer? J'utilise virtualenv parce que je ne veux pas d'une installation de postgres à l'échelle du système.


Je suis le seul à avoir fourni une réponse pertinente sur la façon de le gérer en utilisant virtualenv et à ne pas manquer de brew, etc. Voir: stackoverflow.com/questions/20170895/…
andilabs

Réponses:


106

Sur Mac, si vous utilisez Postgres.app , le fichier pg_config se trouve dans votre /Applications/Postgres.app/Contents/Versions/<current_version>/binrépertoire. Cela devra être ajouté à votre chemin système pour corriger cette erreur, comme ceci:

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

Ainsi, par exemple, si la version actuelle de Postgres.app est 9.5, cette ligne d'exportation serait:

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

Avec les versions plus récentes de Postgres.app (> 9.5?), Vous pouvez simplement ajouter "latest" à la place du numéro de version, comme ceci:

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

5
notez que la version changera avec le temps; maintenant c'est9.4
andilabs

1
sachez que pour qu'il soit toujours appliqué au shell actuel, il faut ajouter cette ligne .bash_profilesi vous utilisez bash de Terminal standard. Si vous utilisez, zshajoutez cette ligne au .zshrcfichier. Tout cela, vous trouverez dans votre répertoire personnel. (juste ls -la)
andilabs

2
C'était environ un million de fois plus facile que d'utiliser une infusion.
Nate

maintenant c'est la version 9.5! envisager de modifier la réponse pour dire la version actuelle?
AZhao

6
vous pouvez remplacer <current_version>par latestquels points la dernière version installée de Postgres. Le dossier de la mine ressemble à: ls /Applications/Postgres.app/Contents/Versions/et ça donne9.5/ latest/
Raymond

96

Sur Mac, la solution est d'installer postgresql:

brew install postgresql

Sur CentOS, la solution est d'installer postgresql-devel:

sudo yum install postgresql-devel

pg_configest dans le postgresql-develpaquet


12
La question fait précéder une configuration "virtualenv". Je ne pense pas que le breuvage soit approprié dans ce cas. On dirait que ça devrait être une solution pure pip.
john hight

psycopg est une liaison à la bibliothèque C, vous devrez donc avoir la bibliothèque C installée. Il n'est pas possible (AFAIK) d'installer des bibliothèques C natives dans virtualenvs.
Penguin Brian

Une fois que vous avez installé les bibliothèques postgresql C, vous pouvez alors réexécuter la commande pip install qui a échoué (cela n'a pas été précisé par la réponse ci-dessus).
Penguin Brian

33

Je suis totalement d'accord avec John Hight pour dire que la plupart des réponses publiées sont totalement hors-sujet en supposant que l'OP a exactement besoin d'utiliser virtualenv .

Pour moi, la réponse était d'exécuter la commande suivante dans l'invite tout en activant virtualenv:

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

(notez que la partie 9.4 représente la version et peut varier)

ou si vous souhaitez utiliser la dernière version installée de Postgres:

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

puis:

pip install psycopg2

va avec succès en supposant que vous avez installé postgres. Et sinon, rappelez-vous que la meilleure solution recommandée est d'utiliser: Postgres.app


3
C'est la meilleure réponse à cette question.
Vinod Sharma

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"si vous souhaitez utiliser la dernière version installée de Postgres
jaynp

19

N'oubliez pas que votre variable $ PATH dans l'environnement virtuel! = Votre variable globale $ PATH. Vous pouvez le confirmer avec 'echo $ PATH' dans votre virtualenv et aussi dans un nouveau shell. Donc, à moins que vous ne souhaitiez installer PostgreSQL en tant qu'instance unique dans votre environnement virtuel (ce n'est pas une chose à faire, imo), vous devrez modifier la variable $ PATH dans virtualenv pour inclure le chemin de votre installation globale (ce qui résolvez votre erreur pg_config manquante).

Voici les étapes:

1.) Dans un nouveau shell, tapez 'which pg_config'. Cela renverra le chemin. Copiez-le. Dans mon cas, le chemin ressemblait à ceci: /Applications/Postgres.app/Contents/Versions/9.3/bin

2.) De retour dans votre shell virtualenv, tapez 'export PATH = / votre-chemin-vers-pg_config: $ PATH'

3.) Ensuite, toujours dans virtualenv, 'pip install psycopg2'

Si tout se passe comme prévu, cela installera psycopg2 dans l'environnement virtuel, mais l'installation se référera à votre installation Global PostgreSQL. Dans mon cas, cette installation globale a été installée via Postgres.App, d'où le chemin. Je préfère cette méthode de travail avec psycopg2 car cela signifie que je peux utiliser la base de données facilement dans n'importe quel virtualenv plutôt que seulement dans l'environnement virtuel défini.

J'espère que cela aidera tous ceux qui arrivent ici. Pour le jus de Google, voici le langage d'erreur explicite (et vague) renvoyé lorsque vous rencontrez ce problème: La
commande python setup.py egg_info a échoué avec le code d'erreur 1


2
Pourtant, je pense que la question implique une "instance unique à l'intérieur" de virtualenv. Je suis toujours à la recherche d'une solution qui installe pg dans virtualenv.
john hight

Tu es le vrai champion et tu as sauvé ma journée.
Hafiz Siddiq

10

Voici comment j'ai pu résoudre ce problème sur mon Mac (OSX 10.9):

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

J'ai eu une erreur CLANG lorsque j'ai essayé pip install psycopg(un problème LLVM 5.1 ), j'ai donc dû installer psycopg avec cette commande à la place:

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

C'est similaire à la solution de Mingyu , mais il y a suffisamment de différences que je pensais que cela valait la peine d'être partagé.


2
+1 a travaillé pour moi. Je ne peux pas croire que je dois spécifier un drapeau personnalisé à un compilateur C pour configurer un environnement de développement postgres + python sur MacOS ...
Andomar

1
La question fait précéder une configuration "virtualenv". Je ne pense pas que le breuvage soit approprié dans ce cas. On dirait que ça devrait être une solution pure pip.
john hight

5

Cette erreur se produit lorsque les outils de génération ne parviennent pas à trouver les bibliothèques PostgreSQL.

Il est souvent nécessaire d'indiquer à psycopg2 comment trouver le binaire pg_config, vous pouvez:

  1. ajoutez le chemin vers pg_config dans le chemin de votre shell (/ usr / local / pgsql / bin /)

  2. ou éditez le fichier setup.cfg dans le dossier source psycopg2 et indiquez le chemin complet vers pg_config sur la ligne commençant par pg_config =

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

  • ci-dessus est un exemple, vous pouvez le faire locate pg_configpour savoir où il réside, ou simplement taper which pg_configet il devrait vous indiquer le chemin.

Moins souvent, l'erreur vient de ne pas avoir installé postgresql sur votre système. Si c'est le cas, téléchargez et compilez postgres, ou téléchargez un binaire psycopg2 pré-construit pour OS X.


1
Bien sûr ... mais comment faites-vous cela dans un virtualenv, et ne pas dépendre d'une installation de pg à l'échelle du système?
john hight

4

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

Après l'installation PostgreSQL 9.5:

brew install postgresql@9.5

Ensuite, ouvrez votre terminal et exécutez:

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

4

vous devez configurer le chemin postgresql:

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

après, vous devez installer les exigences:

pip3 install -r requirements

2

virtualenv est pour les packages python. Je ne pense pas que vous puissiez contenir des postgres dans un virtualenv. Le message d'erreur que vous voyez est probablement dû au fait que vous n'avez pas encore installé postgres. Le script d'installation psycopg2 recherche les fichiers postgres (dans ce cas pg_config) et ne les trouve pas car il n'est pas installé. postgres ne peut pas être installé en utilisant pip ou virtualenv.


1
il est possible d'installer postgresql dans un virtualenv et cette erreur est souvent un problème de chemin, indépendamment de l'installation de postgresql.
l'L'l

1
@HolyMackerel, merci pour la réponse la plus pertinente. Des détails à offrir sur les raisons pour lesquelles vous ne pouvez pas installer psycopg2 / pg dans virtualenv?
john hight

1
postgres n'a rien à voir avec python. Ils courent séparément mais se parlent.
Bioto


1

En plus des réponses fournies par @bkev et @andi, selon la documentation sur Postgres.app, vous devez ajouter ce qui suit à votre bash_profile sur Mac:

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

Notez qu'il n'y a pas de numéro de version codé en dur. Je voulais ajouter ceci en commentaire aux réponses ci-dessus, mais je n'ai pas assez de représentants pour cela.


1

Si vous utilisez postgresql 9.4, le fichier se trouve dans

/usr/pgsql-9.4/bin/pg_config

Le nom du package est

postgresql94-9.4.9-1PGDG.rhel6.x86_64

pour ajouter pg_config à votre PATH, procédez comme suit

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

1

Si vous ne devez pas utiliser psycopgspécifiquement le pilote, passez au pg8000pilote. C'est du pur Python et moins capricieux.


0

Sur Ubuntu, j'avais juste besoin du package de développement postgres:

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

0

Le mien était situé dans /Library/PostgreSQL/9.4/bin

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.