Nie można znaleźć nagłówka libpq-fe.h podczas próby zainstalowania pg gem

790

Korzystam z wcześniejszej wersji Ruby on Rails 3.1. Lubię używać PostgreSQL, ale problemem jest instalacja pgklejnotu. Daje mi następujący błąd:

$ 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

Jak rozwiązać ten problem?

demonchand
źródło
czy możesz udowodnić, że masz zainstalowaną stronę?
thenengah

Odpowiedzi:

1246

Wygląda na to, że w Ubuntu nagłówek jest częścią libpq-devpakietu (przynajmniej w następujących wersjach Ubuntu: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise Pangolin), 14.04 (Trusty Tahr) i 18.04 (Bionic Beaver)):

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

Spróbuj zainstalować libpq-devlub jego odpowiednik dla twojego systemu operacyjnego:

  • W systemach Ubuntu / Debian: sudo apt-get install libpq-dev
  • W systemach Red Hat Linux (RHEL):yum install postgresql-devel
  • W przypadku Mac Homebrew :brew install postgresql
  • W przypadku Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • W przypadku OpenSuse :zypper in postgresql-devel
  • W przypadku ArchLinux :pacman -S postgresql-libs
mu jest za krótkie
źródło
1
nie działa dla mnie na 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
Jeśli musisz mieć zainstalowaną bibliotekę javascript ... gem install 'execjs' i gem install 'therubyracer'
Nick Woodhams
@TravisR: Dzięki za aktualizację, właśnie zmieniłem ją w wiki społeczności, aby ułatwić wszystkim aktualizację.
mu jest za krótki
Używam Ubuntu 12.10, nie mogę zainstalować pg gem po zainstalowaniu libpq-dev
vedarthk
2
Popraw swoją odpowiedź, aby dołączyć. apt-get install postgres-server-dev-{pg.version} Twoja odpowiedź nie działa już w wersji postgresql 9.4 na Ubuntu 14.04. Zobacz: stackoverflow.com/a/28837453/75194
Ryan Rauh
168

W systemie macOS (wcześniej Mac OS X i OS X ) użyj Homebrew, aby zainstalować odpowiednie nagłówki:

brew install postgresql

a następnie bieganie

gem install pg

powinno działać.

Alternatywnie, zamiast instalować całość postgresql, można brew install libpqi eksportować poprawna PATHi PKG_CONFIG_PATHjak wyjaśniono w sekcji „Ostrzeżenia”

okradziono mnie
źródło
5
Czy powoduje to jakiekolwiek problemy, jeśli używasz również Postgres.app?
iconoclast
3
U mnie po biegu brew install postgressqlbiegam ARCHFLAGS="-arch x86_64" gem install pgi działa dobrze.
generalduka
5
Alternatywnie, po prostu działa brew install libpqxx Mac OSX
Ricardo Saporta
4
@ RicardoSaporta libpqxxinstaluje się postgresqljako zależność, więc jest zasadniczo taki sam jakbrew install postgresql
Troggy
3
Zamiast instalować całość postgresql, możesz brew install libpqi wyeksportować prawidłowe PATHi PKG_CONFIG_PATHzgodnie z objaśnieniem w części „Ostrzeżenia”.
goetzc
118

Próbowałem też gem install libpq-dev, ale otrzymałem ten błąd:

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

Okazało się jednak, że instalacja z sudo apt-get(której staram się unikać przy użyciu Ruby on Rails) działała, tj

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

wtedy byłem w stanie to zrobić

gem install pg

bez problemów.

Michael Durrant
źródło
3
Tak, klejnot Ruby pg otacza zwykłe biblioteki C PostgreSQL, które są dostarczane z libpq-devpakietem Ubuntu / Debian / ...
mu jest za krótki
46

Mógłbym rozwiązać to w inny sposób. Nie znalazłem biblioteki w moim systemie. Dlatego zainstalowałem go za pomocą aplikacji z głównej strony PostgreSQL. W moim przypadku (OS X) znalazłem plik /Library/PostgreSQL/9.1/include/po zakończeniu instalacji. Możesz również mieć plik w innym miejscu, w zależności od systemu, jeśli masz już zainstalowany PostgreSQL.

Dzięki temu linkowi, jak dodać dodatkową ścieżkę do instalacji klejnotów , mogę skierować klejnot do biblioteki lib za pomocą tego polecenia:

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

Potem działa, ponieważ teraz wie, gdzie znaleźć brakującą bibliotekę. Po prostu zamień ścieżkę na odpowiednią lokalizację dla swojego libpq-fe.h

David Pelaez
źródło
2
Rozwiązanie Davida zadziałało dla mnie. Śledziłem libpq-fe.h do „/Applications/Postgres.app/Contents/Versions/9.3/include” i użyłem polecenia eksportu ze wspomnianą ścieżką, a następnie „gem install pg” i gem został zainstalowany poprawnie.
Ryan Spears,
Dzięki za to, pracował dla mnie, używając:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
brookr
1
PostgreSQL 9.3 na CentOS 6 Rozwiązałem to przez symlinking te pg_*skrypty w $ PATH tak: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Zainstalowałem postgres 9.3 tak: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
możesz także napisać jakogem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445
Jeszcze lepiej, użyj export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config". Plik pg_configwykonywalny zostanie wywołany, aby uzyskać wszystkie wymagane opcje kompilatora i konsolidatora - możesz go uruchomić samodzielnie, aby je zobaczyć.
skozin
29

Nie można znaleźć nagłówka libpq-fe.h

miałem sukces na CentOS 7.0.1406, uruchamiając następujące polecenia:

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

Alternatywnie można skonfigurować program pakujący, aby zawsze instalował pgprzy użyciu tych opcji (pomocny przy uruchamianiu programu pakującego w środowiskach wdrażania),

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config
lfender6445
źródło
1
bardzo pomocne, dzięki. Aby dodać notatkę dotyczącą konfiguracji pakietu ... musisz uruchomić to polecenie, gdy jesteś zalogowany jako użytkownik, który będzie wykonywał kolejne polecenie pakietu. Konfiguracja pakietu jest przechowywana w ~ / .bundle / config, więc nie zostanie znaleziona, jeśli uruchomisz konfigurację pakietu, gdy jesteś zalogowany jako root, ale pakiet jest uruchamiany przez (np. Z capistrano) użytkownika „wdrażającego”.
Les Nightingill
3
pakiet config build.pg --with-pg-config = / usr / pgsql-9.4 / bin / pg_config rozwiąż i dla mnie na
Centos
2
pakiet config build.pg --with-pg-config = / usr / pgsql-10 / bin / pg_config, jeśli używasz postgresql10
Mahesh Neelakanta
25

W przypadku CentOS 6.4

yum install postgresql-devel
gem install pg

działało dobrze!

Arivarasan L.
źródło
Korzystanie MacPorts, sudo port install postgresql-devel.
Dawei Yang
17

Dla przypomnienia:

Aplikacja Ruby on Rails 4 w systemie OS X z PostgresApp (w tym przypadku wymagana wersja 0.17.1 - rodzaj starego projektu):

gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config
pablomarti
źródło
1
Działa świetnie, jeśli korzystasz ze wspaniałego Postgres.app . W przypadku Postgres 10 użyłem ścieżki/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
Master of Ducks
13

W systemie Mac OS X uruchom tak:

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

***/path/to/pg_config*** jest ścieżką do pg_config

Jiemurat
źródło
1
Pozytywne. Zainstalowałem Postgresql poprzez graficzny instalator EnterpriseDB . Następnie muszę znaleźć ścieżkę pg-config sudo find / -name "pg_config", a następnie gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_configużyć ścieżki, którą właśnie znalazłem.
Yi Zeng,
12

W moim przypadku była to paczka postgresql-server-dev-8.4(korzystam z Ubuntu 11.04 (Natty Narwhal), 64 bity).

Johann
źródło
10

Właściwą odpowiedzią dla użytkowników komputerów Mac z Postgres.app jest kompilacja na podstawie libpqdostarczonego z tym pakietem. Na przykład w wersji 9.4 (aktualna w tym tekście) wszystko czego potrzebujesz to:

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

Dzięki temu Twój pgklejnot będzie zsynchronizowany z dokładnie zainstalowaną wersją PostgreSQL. Instalacja czegoś z Homebrew jest marnotrawstwem w tym przypadku.

jelder
źródło
9

Miałem ten sam problem na Amazon Linux. Mogłem znaleźć nagłówek libpq-fe.h, ale jakoś nie działało.

Pochodzi z różnych wersji pakietów, które zostały zainstalowane przez różnych użytkowników na komputerze. Zainstalowano PostgreSQL 9.2 i PostgreSQL 9.3. Przed włączeniem bibliotek upewnij się, że masz swoją wersję PostgreSQL.

Dla mnie magiczna linia poleceń brzmiała:

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

Źródło: Niemal idiota, jak zainstalować PostgreSQL 9.3, PostGIS 2.1 i pgRouting z Yum

Fab V.
źródło
Po zainstalowaniu bibliotek ... wyczyść: „make distclean”, „make clean”, „./configure” i rozpocznij kompilację!
mzalazar
8

Bardziej ogólna odpowiedź dla każdej dystrybucji opartej na Debianie (która obejmuje Ubuntu) jest następująca. Najpierw zainstaluj apt-filepakiet działający jako root:

apt-get install apt-file

Umożliwia to wyszukiwanie pakietów zawierających plik. Następnie zaktualizuj bazę danych za pomocą

apt-file update

(można to uruchomić jako zwykły użytkownik). Następnie poszukaj brakującego nagłówka, używając:

apt-file search libpq-fe.h

Na moim komputerze daje to:

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

Proszę bardzo !

Vincent Fourmond
źródło
„libpq-dev: /usr/include/postgresql/libpq-fe.h” jest obecny, podczas gdy „postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h” jest nieobecny ? czego mi brakuje ?
furiabhavesh
Zawartość pliku mogła ulec zmianie. Wygląda na to, że w pakiecie postgres -... znajdowała się prywatna kopia libpq-fe.h. W każdym razie libXXX-dev jest tym, którego szukasz, jeśli chcesz kompilować.
Vincent Fourmond,
7

W systemie MacOS bez instalowania serwera PostgreSQL:

brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"
Michael A.
źródło
5

Na komputerze Mac rozwiązałem go za pomocą tego kodu:

gem install pg -v '0.18.4' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config
Mario
źródło
4

Korzystam z Postgres.app na komputerze Mac i musiałem

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

pierwszy. Następnie

bundle install

pracował dla mnie.

joh-mue
źródło
4

Miałem ten sam problem w systemie Mac OS, ale łatwo zainstalowałem klejnot PostgreSQL, korzystając z następującego terminalu:

ARCHFLAGS="-arch x86_64" gem install pg

(Najpierw zainstalowałem PostgreSQL brew install postgresql.)

rassom
źródło
4

Znalazłem tę odpowiedź i była to jedyna, która zadziałała dla mnie (Mac OS) - po około dwóch dniach badań:

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

Zobacz pytanie Przepełnienie stosu Nie można znaleźć biblioteki klienta PostgreSQL (libpq) .

Cynthia Sanchez
źródło
4

Niedawno zaktualizowałem system do Mac OS X 10.10 (Yosemite) i miałem trudności z budowaniempg klejnotu.

Zgłoszony błąd był typowy:

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

Moje rozwiązanie było gem uninstall pgi wtedy bundle update pgwymienić klejnot z najnowszym. Uruchomiłem brew update; brew upgradepo instalacji Yosemite, aby uzyskać najnowsze wersje pakietów, które wcześniej zainstalowałem.

Martin Streicher
źródło
4

Na Ubuntu zainstaluj „libpq-dev”, aby pozbyć się tego problemu.

sudo apt-get install libpq-dev
Raju
źródło
Jeśli to nie wystarczy, dodaj sudo apt-get install postgresqlwcześniejlibpq-dev
Alex Poca
3

Na CentOS zainstalowałem libpq-dev packageza pomocą polecenia poniżej

yum install postgresql-devel

Wykonanie gem install pgzwróciło ten sam błąd co „No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config ”.

Zainstalowanie klejnotu jak poniżej rozwiązało mój problem

gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config
user2086641
źródło
2

W FreeBSD (9.1) niezbędnym pakietem jest / usr / porty / database / postgresql-server *, który po zainstalowaniu zainstaluje również wymagany plik nagłówka, który powoduje, że instalacja gem „pg” kończy się niepowodzeniem. Ta odpowiedź tutaj pomogła mi znaleźć rozwiązanie, ale różnica w nazwach pakietów wymagała trochę wyszukiwania.

Mam nadzieję, że pomoże to komukolwiek uniknąć zarysowania głowy podczas wyszukiwania pakietu „-dev” w systemie FreeBSD!

Claus Due
źródło
2

W systemie Debian 7.0, 64-bitowym (Wheezy), po prostu uruchom:

sudo apt-get install libpq-dev

Po pomyślnym zainstalowaniu libpq-dev uruchom:

bundle install
Eric Wu
źródło
2

Pod CentOS 6.5 (Squeeze) utworzyłem plik:

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

z treścią:

pathmunge /usr/pgsql-9.3/bin

Uwaga: tutaj należy ustawić ścieżkę PostgreSQL za pomocą pliku pg_config. Możesz to znaleźć za pomocą polecenia:

$ sudo find / -iname pg_config

Zapisz plik:

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

i spróbuj ponownie wykonać polecenie.

Uwaga: Za każdym razem, gdy zmienisz konfigurację Bash - zmieniając konfigurację profilu. D - powinieneś ponownie załadować Bash.

lucianosousa
źródło
Jak zainstalowałeś postgres? I dowiązane te pg_*skrypty na ścieżce tak: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Po tym nie potrzebowałem żadnych dodatkowych skryptów ani zmiennych środowiskowych.
JoePasq
2

Lokalizacja libpq-fe.hzależy od tego, gdzie znajduje się Twoja instalacja PostgreSQL (która zależy od tego, jak ją zainstalowałeś). Użyj locate( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ), aby znaleźć libpq-fe.hplik na swoim komputerze. Jeśli istnieje, będzie w includekatalogu instalacji PostgreSQL.

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

binKatalog, który zawiera pg_config, będzie w tym samym katalogu co includekatalogu. Jak sugeruje błąd, użyj opcji --with-pg-config, aby zainstalować klejnot:

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

Pamiętaj, że może być konieczne uruchomienie, updatedbjeśli nigdy nie korzystałeś locatelub nie zaktualizowałeś się od czasu instalacji PostgreSQL.

akbrown
źródło
Bez --wcześniej pojawia --with-pg-config=...się błąd: BŁĄD: Podczas wykonywania gem ... (OptionParser :: InvalidOption) niepoprawna opcja: --with-pg-config = / usr / bin / pg_config)
Alexis Wilke
2

W końcu rozwiązałem ten problem, ale nie stosując wcześniej opisanych metod.

Używając brew install postgresql, dowiaduję się, że został już zainstalowany, ale nie jest powiązany.

  1. Dowiedz się, gdzie jest zainstalowany PostgreSQL i usuń go,

  2. Z brew install postgresqldrugiej strony

  3. brew link postgresql

  4. gem install pg

Chile Yang
źródło
"napar Link --force postgresql" pracował dla mnie, ale befor że muszę biec 'export PATH = "/ usr/local/opt/[email protected]/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani
2

Miałem ten problem z Postgresql 9.6. Byłem w stanie to naprawić, wykonując:

brew upgrade postgresql@9.6
brew link postgresql@9.6 --force
gem install pg
mwalsher
źródło
2

Napotkałem ten sam błąd z postgres zainstalowanym przez asdf. Rozwiązania pg-config nie działały dla mnie. Zamiast tego musiałem zlokalizować folder zawierający postgres zawierający plik i uruchomić polecenie z --with-pg-includeflagą

gem install pg -- --with-pg-include=/<path>/.asdf/installs/postgres/<version>/include
Matthias Michael Engh
źródło
1

Ponieważ AltLinuxpakiet postgresqlx.x-devel(w moim przypadku postgresql9.5-devel) musi być zainstalowany:

apt-get install postgresql9.5-devel
Малъ Скрылевъ
źródło
Możesz również zainstalować określone wersje za pomocą yum - yum zainstaluj postgresqlxx-devel np.
Yum
1

Rozwiązałem ten problem, instalując pakiet „postgresql-common”. Ten pakiet zawiera pg_configplik binarny, który najprawdopodobniej został pominięty.

Fabrizio Regini
źródło