web-dev-qa-db-fra.com

Impossible de trouver l'en-tête 'libpq-fe.h lors de l'installation de pg gem

J'utilise la version précédente de Ruby on Rails 3.1. J'aime utiliser PostgreSQL, mais le problème est d'installer la gemme pg. 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?

672
demonchand

Il semble que dans Ubuntu cet en-tête fait partie du paquet libpq-dev (au moins dans les versions suivantes d’Ubuntu: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Ocelot onirique), 12.04 (Pangolin précis), 14.04 (Trusty Tahr) et 18.04 (Bionic Beaver)):

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

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

  • Pour les systèmes Ubuntu/Debian: Sudo apt-get install libpq-dev
  • Sur 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
1084
mu is too short

Sur macOS (précédemment 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.

Sinon, au lieu d'installer l'intégralité de la postgresql entière, vous pouvez brew install libpq et exporter les PATH et PKG_CONFIG_PATH correctes, comme expliqué dans la section "Avertissements"

141
iwasrobbed

J'avais aussi essayé de 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 constaté que l’installation avec Sudo apt-get (que j’essaie d’éviter d’utiliser 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.

113
Michael Durrant

Je pourrais résoudre cela d'une autre manière. Je n'ai pas trouvé la bibliothèque sur mon système. Ainsi, je l'ai installé en utilisant une application du site 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, en fonction de votre système, si vous avez déjà installé PostgreSQL.

Grâce à ce lien sur comment ajouter un chemin supplémentaire pour l'installation de gem , je pourrais 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. Il suffit de remplacer le chemin par le bon emplacement pour votre libpq-fe.h

40
David Pelaez

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

j'ai eu du succès 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 qu'il installe toujours pg avec ces options (utile pour l'exécution de bundler dans des environnements de déploiement), 

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config
26
lfender6445

Pour CentOS 6.4,

yum install postgresql-devel
gem install pg

a bien fonctionné!

22
Arivarasan L

Juste pour info:

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

gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config
14
pablomarti

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

12
Johann

Sous Mac OS X, procédez comme suit:

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

***/path/to/pg_config*** est le chemin d'accès à pg_config

12
Jiemurat

La bonne réponse pour les utilisateurs de Mac avec Postgres.app consiste à utiliser la variable libpq fournie avec ce paquet. Par exemple, avec la version 9.4 (à jour au moment de l'écriture), tout ce dont vous avez besoin est:

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

Ceci maintiendra votre gemme pg synchronisée avec exactement la version de PostgreSQL que vous avez installée. L'installation de quelque chose à partir de Homebrew est un gaspillage dans ce cas.

11
jelder

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

Cela provenait des différentes versions des paquetages 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 la suivante:

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

8
Fab V.

Une réponse plus générale pour toute distribution basée sur Debian (incluant Ubuntu) est la suivante. Commencez par installer le package apt-file exécuté en tant que root:

apt-get install apt-file

Cela vous permet de rechercher des paquets 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 avec:

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à !

7
Vincent Fourmond

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
4
Mario

J'ai trouvé cette réponse et c'est la seule qui a fonctionné pour moi (Mac OS) - après une recherche d'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 relative au débordement de pile Impossible de trouver la bibliothèque cliente PostgreSQL (libpq).

4
Cynthia Sanchez

J'ai eu le même problème sur Mac OS, mais j'ai facilement installé le gem PostgreSQL en utilisant les éléments suivants dans un terminal:

ARCHFLAGS="-Arch x86_64" gem install pg

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

4
rassom

J'ai récemment effectué une mise à niveau vers Mac OS X v10.10 (Yosemite) et je rencontrais des difficultés pour créer le joyau pg.

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 de gem uninstall pg et ensuite bundle update pg pour remplacer la gemme par la plus récente. J'ai exécuté brew update; brew upgrade après l'installation de Yosemite pour obtenir les dernières versions des packages que j'avais précédemment installés.

4
Martin Streicher

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

yum install postgresql-devel

L'exécution de gem install pg a renvoyé 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 ci-dessous a résolu mon problème

gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config
3
user2086641

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"
3
Michael A.

Je cours Postgres.app sur un Mac et je devais 

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

premier. ensuite

bundle install

a travaillé pour moi.

3
joh-mue

Sur Ubuntu, installez "libpq-dev" pour résoudre ce problème.

Sudo apt-get install libpq-dev
2
Raju

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 le paramètre Bash configuration - en modifiant la configuration de profile.d -, vous devez recharger Bash.

2
lucianosousa

Sur Debian 7.0, 64 bits (Wheezy), exécutez simplement:

Sudo apt-get install libpq-dev

Après avoir installé libpq-dev avec succès, lancez:

bundle install
2
Eric Wu

L'emplacement de libpq-fe.h dépend de l'emplacement d'installation de PostgreSQL (ce qui dépend de la manière dont vous l'avez installé). Utilisez locate ( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ) pour rechercher le fichier libpq-fe.h sur votre ordinateur. S'il existe, il se trouvera dans le répertoire include de votre installation PostgreSQL.

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

Le répertoire bin, qui contient pg_config, sera dans le même répertoire que le répertoire include. 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 updatedb si vous n'avez jamais utilisé locate ou si vous n'avez pas mis à jour depuis l'installation de PostgreSQL.

2
akbrown

Je viens d'avoir cela sur OSX en cours d'exécution brassée et [email protected].

Ma solution était la suivante:

CONFIGURE_ARGS="with-pg-include=/usr/local/opt/[email protected]/include/" bundle install
2
Nick

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 a déjà été installé, mais pas lié.

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

  2. Puis brew install postgresql encore,

  3. brew link postgresql

  4. gem install pg

2
Chile Yang

Sous 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 empêche l’installation gem de "pg". Cette réponse m'a aidé à trouver la solution, mais la différence entre les noms de paquets a nécessité un peu de recherche.

J'espère que cela aidera quelqu'un à éviter un peu de maux de tête lors de la recherche du paquet "-dev" sur un système FreeBSD!

2
Claus Due

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

apt-get install postgresql9.5-devel

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

brew upgrade [email protected]
brew link [email protected] --force
gem install pg
1
mwalsher

J'avais un problème similaire, et cela l'a résolu pour moi:

gem install do_postgres -- --with-pgsql-server-dir=/Applications/Postgres.app/Contents/MacOS --with-pgsql-server-include=/Applications/Postgres.app/Contents/MacOS/include/server

La source:

https://Gist.github.com/oisin/6562181

1
dunkles

Sur OS X 10.9 (Mavericks), je brew-installed postgresql, puis je devais rvm reinstall mon Ruby. Je suis heureux maintenant :)

1
ether_joe

J'ai résolu ceci en installant le paquetage 'postgresql-common'. Ce paquet fournit le binaire pg_config qui est probablement ce qu'il vous manquait.

1
Fabrizio Regini

Sous OS X et MacPorts le paquetage -devel pour PostgreSQL n'est plus requis. L'installation de la gemme pg fonctionne comme suit:

~ > Sudo port install postgresql-devel
...
Error: postgresql-devel has been replaced by postgresql91; please install that port instead
~ > gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql95/bin/pg_config

Voir aussi ce post .

0
Jens

J'ai rencontré la même erreur avec postgres installé via asdf. Les solutions pg-config ne fonctionnaient pas pour moi. Au lieu de cela, j'ai dû localiser le dossier d'inclusion postgres contenant le fichier et exécuter la commande avec l'indicateur --with-pg-include

gem install pg -- --with-pg-include=/<path>/.asdf/installs/postgres/<version>/include
0

Sur Arch Linux, vous devrez installer postgresql-libs :

Sudo pacman -Syu postgresql-libs
0
Philip Kirkbride

Pour Mac OS X, installez simplement https://postgresapp.com/ et suivez les étapes pour la section de ligne de commande et Ruby

Sudo mkdir -p /etc/paths.d &&
echo /Applications/Postgres.app/Contents/Versions/latest/bin | Sudo tee /etc/paths.d/postgresapp

Ensuite 

Sudo ARCHFLAGS="-Arch x86_64" gem install pg
0

Étape 1) Assurez-vous que postgress est installé sur votre système (s'il est déjà installé et que vous pouvez exécuter le serveur postgress sur votre ordinateur, passez à l'étape (2). 

apt-get install postgresql postgresql-contrib (sol - fatal error: libpq-fe.h: No such file or directory)
Sudo apt-get install Ruby-dev (required to install postgress below)
Sudo gem install pg
Sudo service postgresql restart

Étape 2) Certains fichiers c ++ tentent d’accéder directement à libpq-fe.h et ne peuvent pas être trouvés. Nous devons donc rechercher manuellement chacun de ces fichiers et remplacer libpq-fe.h par postgresql/libpq-fe.h

La commande permettant de rechercher toutes les occurrences de libpq-fe.h dans tous les répertoires et sous-répertoires est grep -rnw ./ -e 'libpq-fe.h'

3) Accédez à Tous les fichiers répertoriés par la commande exécutée à l’étape 2 et modifiez manuellement libpq-fe.h avec postgresql/libpq-fe.h.

0
sapy

Seulement désinstaller (sudo apt-get purge) libpq-dev et le ré-installer a fonctionné pour moi. 

0
vasilakisfil

Ma solution pour Fedora 30:

Sudo dnf install /usr/include/libpq-fe.h
0
Aarón Castro