Impossible de trouver l'en-tête 'libpq-fe.h lorsque vous essayez d'installer pg gem

790

J'utilise la pré-version de Ruby on Rails 3.1. J'aime utiliser PostgreSQL, mais le problème est d'installer la pggemme. Cela me donne l'erreur suivante:

$ gem install pg
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /home/u/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/home/u/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
    --with-pg
    --without-pg
    --with-pg-dir
    --without-pg-dir
    --with-pg-include
    --without-pg-include=${pg-dir}/include
    --with-pg-lib
    --without-pg-lib=${pg-dir}/lib
    --with-pg-config
    --without-pg-config
    --with-pg_config
    --without-pg_config


Gem files will remain installed in /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0 for inspection.
Results logged to /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0/ext/gem_make.out

Comment résoudre ce problème?

demonchand
la source
pouvez-vous prouver que vous avez installé pg?
thenengah

Réponses:

1247

Il semble que dans Ubuntu cet en-tête fasse partie du libpq-devpackage (au moins dans les versions Ubuntu suivantes: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise Pangolin), 14.04 (Trusty Tahr) et 18.04 (castor bionique)):

...
/usr/include/postgresql/libpq-fe.h
...

Essayez donc d'installer libpq-devou son équivalent pour votre système d'exploitation:

  • Pour les systèmes Ubuntu / Debian: sudo apt-get install libpq-dev
  • Sur les systèmes Red Hat Linux (RHEL):yum install postgresql-devel
  • Pour Mac Homebrew :brew install postgresql
  • Pour Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • Pour OpenSuse :zypper in postgresql-devel
  • Pour ArchLinux :pacman -S postgresql-libs
mu est trop court
la source
1
n'a pas fonctionné pour moi sur ubuntu 11.04durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$ gem install libpq-dev ERROR: Could not find a valid gem 'libpq-dev' (>= 0) in any repository durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$
Michael Durrant
1
Si vous devez alors installer une bibliothèque javascript ... installez gem 'execjs' et installez gem 'therubyracer'
Nick Woodhams
@TravisR: Merci pour la mise à jour, je viens de le transformer en un wiki communautaire pour faciliter la mise à jour de tout le monde.
mu est trop court
J'utilise Ubuntu 12.10, je ne peux pas installer pg gem après avoir installé libpq-dev
vedarthk
2
Veuillez réviser votre réponse pour inclure apt-get install postgres-server-dev-{pg.version} Votre réponse ne fonctionne plus avec postgresql 9.4 sur Ubuntu 14.04 Voir: stackoverflow.com/a/28837453/75194
Ryan Rauh
169

Sur macOS (anciennement Mac OS X et OS X ), utilisez Homebrew pour installer les en-têtes appropriés:

brew install postgresql

puis en cours d'exécution

gem install pg

devrait marcher.

Alternativement, au lieu d'installer le tout postgresql, vous pouvez brew install libpqet exporter le correct PATHet PKG_CONFIG_PATHcomme expliqué dans la section 'Avertissements'

J'ai été volé
la source
5
Cela pose-t-il des problèmes si vous utilisez également Postgres.app?
iconoclaste du
3
Pour moi, après la course, brew install postgressqlje cours ARCHFLAGS="-arch x86_64" gem install pget fonctionne bien.
Overallduka
5
Alternativement, il suffit de fonctionner brew install libpqxxsur mac OSX
Ricardo Saporta
4
@RicardoSaporta libpqxxs'installe postgresqlcomme dépendance, c'est donc essentiellement la même chose quebrew install postgresql
Troggy
3
Au lieu d'installer le tout postgresql, vous pouvez brew install libpqet exporter le correct PATHet PKG_CONFIG_PATHcomme expliqué dans la section «Avertissements».
goetzc
118

J'avais également essayé de le faire gem install libpq-dev, mais j'ai reçu cette erreur:

Can't find the 'libpq-fe.h header
*** extconf.rb failed ***

Cependant, j'ai trouvé que l'installation avec sudo apt-get(que j'essaie d'éviter d'utiliser avec Ruby on Rails) fonctionnait, c'est-à-dire

sudo apt-get install libpq-dev
# or
apt-get install postgres-server-dev-{pg.version}
# for postgresql 9.4 on Ubuntu 14.04

alors j'ai pu faire

gem install pg

sans problèmes.

Michael Durrant
la source
3
À droite, la gemme Ruby pg enveloppe les bibliothèques C PostgreSQL habituelles fournies avec le libpq-devpaquet Ubuntu / Debian / ....
mu est trop court
46

Je pourrais résoudre cela d'une autre manière. Je n'ai pas trouvé la bibliothèque sur mon système. Je l'ai donc installé à l'aide d'une application du site Web principal de PostgreSQL. Dans mon cas (OS X), j'ai trouvé le fichier sous /Library/PostgreSQL/9.1/include/une fois l'installation terminée. Vous pouvez également avoir le fichier ailleurs selon votre système si vous avez déjà installé PostgreSQL.

Grâce à ce lien sur la façon d'ajouter un chemin supplémentaire pour l'installation de gem , j'ai pu pointer le gem vers la lib avec cette commande:

export CONFIGURE_ARGS="with-pg-include=/Library/PostgreSQL/9.1/include/"
gem install pg

Après cela, cela fonctionne, car il sait maintenant où trouver la bibliothèque manquante. Remplacez simplement le chemin par le bon emplacement pour votre libpq-fe.h

David Pelaez
la source
2
La solution de David a fonctionné pour moi. J'ai suivi libpq-fe.h jusqu'à '/Applications/Postgres.app/Contents/Versions/9.3/include' et j'ai utilisé la commande d'exportation avec ledit chemin, suivie par 'gem install pg' et la gemme installée avec succès.
Ryan Spears
Merci pour cela, a fonctionné pour moi, en utilisant:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
brookr
1
En utilisant Postgresql 9.3 sur CentOS 6 Je résolu ce problème en lien symbolique des pg_*scripts dans le $ PATH comme ceci: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. J'ai installé postgres 9.3 comme ceci:yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm && yum install postgresql93 postgresql93-contrib postgresql93-server postgresql93-devel
JoePasq
1
vous pouvez également écrire en tant quegem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445
Mieux encore, utilisez export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config". L' pg_configexécutable sera appelé pour obtenir toutes les options requises du compilateur et de l'éditeur de liens - vous pouvez l'exécuter vous-même pour les voir.
skozin
29

Impossible de trouver l'en-tête libpq-fe.h

j'ai réussi sur CentOS 7.0.1406 en exécutant les commandes suivantes:

~ % psql --version # => psql (PostgreSQL) 9.4.1
yum install libpqxx-devel
gem install pg -- --with-pg-config=/usr/pgsql-9.4/bin/pg_config

Alternativement , vous pouvez configurer bundler pour toujours installer pgavec ces options (utile pour exécuter bundler dans des environnements de déploiement),

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config
lfender6445
la source
1
très utile, merci. Juste pour ajouter une note concernant la configuration du bundle ... vous devez exécuter cette commande lorsque vous êtes connecté en tant qu'utilisateur qui exécutera la commande de bundle suivante. La configuration du bundler est stockée dans ~ / .bundle / config, donc elle ne sera pas trouvée si vous exécutez la configuration du bundle lorsque vous êtes connecté en tant que root, mais le bundler est exécuté par (par exemple avec capistrano) l'utilisateur 'deploy'.
Les Nightingill
3
bundle config build.pg --with-pg-config = / usr / pgsql-9.4 / bin / pg_config résoudre i pour moi sur Centos 7
liloargana
2
bundle config build.pg --with-pg-config = / usr / pgsql-10 / bin / pg_config si vous utilisez postgresql10
Mahesh Neelakanta
25

Pour CentOS 6.4,

yum install postgresql-devel
gem install pg

a bien fonctionné!

Arivarasan L
la source
En utilisant macports, sudo port install postgresql-devel.
Dawei Yang
17

Juste pour info:

Application Ruby on Rails 4 sous OS X avec PostgresApp (dans ce cas, la version 0.17.1 est nécessaire - une sorte de vieux projet):

gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config
pablomarti
la source
1
Fonctionne très bien si vous utilisez le merveilleux Postgres.app . Pour Postgres 10, j'ai utilisé le chemin/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
Master of Ducks
13

Sur Mac OS X, exécutez comme ceci:

gem install pg -- --with-pg-config=***/path/to/pg_config***

***/path/to/pg_config*** est le chemin vers pg_config

Jiemurat
la source
1
A voté. J'ai installé Postgresql via le programme d'installation grapihcal d'EnterpriseDB . Ensuite, je dois trouver le chemin pg-config sudo find / -name "pg_config", puis gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_configutiliser le chemin que je viens de découvrir.
Yi Zeng
12

Dans mon cas, c'était un package postgresql-server-dev-8.4(je suis sur Ubuntu 11.04 (Natty Narwhal), 64 bits).

Johann
la source
10

La bonne réponse pour les utilisateurs de Mac avec Postgres.app est de s'appuyer sur le libpqpackage fourni avec. Par exemple, avec la version 9.4 (en cours de rédaction), tout ce dont vous avez besoin est:

export CONFIGURE_ARGS="with-pg-include=/Applications/Postgres.app/Contents/Versions/9.4/include"
gem install pg

Cela gardera votre pgbijou synchronisé avec exactement la version de PostgreSQL que vous avez installée. Installer quelque chose de Homebrew est un gaspillage dans ce cas.

jelder
la source
9

J'ai eu le même problème sur Amazon Linux. J'ai pu trouver l'en-tête libpq-fe.h, mais ça n'a pas fonctionné.

Il provenait des différentes versions des packages installés par les différents utilisateurs de la machine. PostgreSQL 9.2 et PostgreSQL 9.3 ont été installés. Assurez-vous donc de votre version de PostgreSQL avant d'inclure les bibliothèques.

Pour moi, la ligne de commande magique était:

sudo yum install postgresql93 postgresql93-server postgresql93-libs postgresql93-contrib postgresql93-devel

Source: Un guide presque idiot pour installer PostgreSQL 9.3, PostGIS 2.1 et pgRouting avec Yum

Fab V.
la source
Après avoir installé les bibliothèques ... faites un nettoyage: "make distclean", "make clean", "./configure" et commencez à compiler!
mzalazar
8

Une réponse plus générale pour toute distribution basée sur Debian (qui inclut Ubuntu) est la suivante. Tout d'abord, installez le apt-filepackage exécuté en tant que root:

apt-get install apt-file

Cela vous permet de rechercher des packages contenant un fichier. Ensuite, mettez à jour sa base de données en utilisant

apt-file update

(cela peut être exécuté en tant qu'utilisateur normal). Ensuite, recherchez l'en-tête manquant en utilisant:

apt-file search libpq-fe.h

Sur ma machine, cela donne:

libpq-dev: /usr/include/postgresql/libpq-fe.h
postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h

Voilà !

Vincent Fourmond
la source
"libpq-dev: /usr/include/postgresql/libpq-fe.h" est présent tandis que "postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h" est pas présent ? Qu'est-ce que je rate ?
furiabhavesh
Le contenu du fichier a peut-être changé. On dirait qu'il y avait une copie privée de libpq-fe.h dans le paquet postgres -.... Dans tous les cas, le libXXX-dev est celui que vous recherchez si vous voulez compiler des choses.
Vincent Fourmond
7

Pour MacOS sans installer le serveur PostgreSQL:

brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"
Michael A.
la source
5

Sur un Mac, je l'ai résolu en utilisant ce code:

gem install pg -v '0.18.4' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config
Mario
la source
4

J'utilise Postgres.app sur un Mac et je devais

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

première. alors

bundle install

travaillé pour moi.

joh-mue
la source
4

J'ai eu le même problème sur Mac OS, mais j'ai installé facilement la gemme PostgreSQL en utilisant ce qui suit dans un terminal:

ARCHFLAGS="-arch x86_64" gem install pg

(J'ai d'abord installé PostgreSQL avec brew install postgresql.)

rassom
la source
4

J'ai trouvé cette réponse, et c'était la seule qui fonctionnait pour moi (Mac OS) - après avoir fait des recherches pendant environ deux jours:

$ sudo su

$ env ARCHFLAGS="-arch x86_64" gem install pg

Building native extensions.  This could take a while...
Successfully installed pg-0.11.0
1 gem installed
Installing ri documentation for pg-0.11.0...
Installing RDoc documentation for pg-0.11.0...

Voir la question Stack Overflow Impossible de trouver la bibliothèque client PostgreSQL (libpq) .

Cynthia Sanchez
la source
4

J'ai récemment mis à niveau vers Mac OS X v10.10 (Yosemite) et j'ai eu du mal à construire le pgjoyau.

L'erreur signalée était typique:

Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... *** extconf.rb failed ***

Ma solution était gem uninstall pget bundle update pgpour remplacer la pierre précieuse avec le dernier. J'ai exécuté brew update; brew upgradeaprès l'installation de Yosemite pour obtenir les dernières versions des packages que j'avais installés précédemment.

Martin Streicher
la source
4

Sur Ubuntu, installez le "libpq-dev" pour vous débarrasser de ce problème.

sudo apt-get install libpq-dev
Raju
la source
Si cela ne suffit pas, ajoutez sudo apt-get install postgresqlavantlibpq-dev
Alex Poca
3

Sur CentOS, j'ai installé en libpq-dev packageutilisant la commande ci-dessous

yum install postgresql-devel

L'exécution a gem install pgrenvoyé la même erreur que " No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config".

L'installation de la gemme comme ci-dessous a résolu mon problème

gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config
user2086641
la source
2

Sur FreeBSD (9.1) le paquet nécessaire est / usr / ports / database / postgresql-server * qui, une fois installé, installera également le fichier d'en-tête requis qui fera échouer l'installation gem de "pg". Cette réponse m'a aidé à trouver la solution, mais la différence de noms de packages a nécessité un peu de recherche.

Espérons que cela aide quelqu'un à éviter un peu de grattage de tête lors de la recherche du paquet "-dev" sur un système FreeBSD!

Claus Due
la source
2

Sur Debian 7.0, 64 bits (Wheezy), lancez simplement:

sudo apt-get install libpq-dev

Après avoir correctement installé libpq-dev, exécutez:

bundle install
Eric Wu
la source
2

Sous CentOS 6.5 (Squeeze), j'ai créé un fichier:

$ sudo touch /etc/profile.d/psql.sh

avec contenu:

pathmunge /usr/pgsql-9.3/bin

Notez ici que vous devez définir votre chemin PostgreSQL avec le fichier pg_config. Vous pouvez le trouver avec la commande:

$ sudo find / -iname pg_config

Enregistrez le fichier:

$ sudo chmod +x /etc/profile.d/ruby.sh

et essayez d'exécuter à nouveau votre commande.

Remarque: Chaque fois que vous modifiez la configuration de Bash - en changeant la configuration de profile.d - vous devez recharger Bash.

lucianosousa
la source
Comment avez-vous installé postgres? Je les liens symboliques sur des pg_*scripts dans le chemin comme ceci: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Après cela, je n'ai plus eu besoin de scripts ou de variables d'environnement supplémentaires.
JoePasq
2

L'emplacement de libpq-fe.hdépend de l'emplacement de votre installation PostgreSQL (qui dépend de la façon dont vous l'avez installée). Utilisez locate( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ) pour trouver le libpq-fe.hfichier sur votre machine. S'il existe, il se trouvera dans le includerépertoire de votre installation PostgreSQL.

$ locate libpq-fe.h
/Library/PostgreSQL/9.1/include/libpq-fe.h

Le binrépertoire, qui contient pg_config, sera dans le même répertoire que le includerépertoire. Comme le suggère l'erreur, utilisez l'option --with-pg-config pour installer la gemme:

$ gem install pg --with-pg-config="/Library/PostgreSQL/9.1/bin/pg_config"

Notez que vous devrez peut-être exécuter updatedbsi vous n'avez jamais utilisé locateou si vous n'avez pas mis à jour depuis l'installation de PostgreSQL.

akbrown
la source
Sans un --avant --with-pg-config=...j'obtiens une erreur: ERREUR: lors de l'exécution de gem ... (OptionParser :: InvalidOption) option invalide: --with-pg-config = / usr / bin / pg_config)
Alexis Wilke
2

J'ai finalement résolu ce problème, mais sans utiliser les méthodes décrites précédemment.

En utilisant brew install postgresql, je découvre qu'il avait déjà été installé, mais pas lié.

  1. Découvrez où PostgreSQL est installé et supprimez-le,

  2. brew install postgresqlencore,

  3. brew link postgresql

  4. gem install pg

Chili Yang
la source
"brew link --force postgresql" a fonctionné pour moi mais pour cela je dois exécuter 'export PATH = "/ usr/local/opt/[email protected]/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani
2

J'ai eu ce problème avec Postgresql 9.6. J'ai pu le réparer en faisant:

brew upgrade postgresql@9.6
brew link postgresql@9.6 --force
gem install pg
mwalsher
la source
2

J'ai rencontré la même erreur avec postgres installé via asdf. Les solutions pg-config n'ont pas fonctionné pour moi. Au lieu de cela, j'ai dû localiser le dossier include de postgres qui contient le fichier et exécuter la commande avec l' --with-pg-includeindicateur

gem install pg -- --with-pg-include=/<path>/.asdf/installs/postgres/<version>/include
Matthias Michael Engh
la source
1

Pour AltLinuxle package postgresqlx.x-devel(dans mon cas postgresql9.5-devel) doit être installé:

apt-get install postgresql9.5-devel
Малъ Скрылевъ
la source
Vous pouvez également installer des versions spécifiques avec yum - yum install postgresqlxx-devel eg yum install postgresql94-devel
dworrad
1

J'ai résolu cela en installant le paquet «postgresql-common». Ce paquet fournit le pg_configbinaire qui est probablement ce qui vous manquait.

Fabrizio Regini
la source