Неможливо знайти заголовок 'libpq-fe.h при спробі встановити pg gem


790

Я використовую попередню версію Ruby on Rails 3.1. Мені подобається використовувати PostgreSQL, але проблема полягає в установці pgсамоцвіту. Це дає мені таку помилку:

$ 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

Як вирішити цю проблему?


чи можете ви довести, що у вас встановлено pg?
thenengah

Відповіді:


1247

У Ubuntu схоже, що заголовок є частиною libpq-devпакету (принаймні, у наступних версіях Ubuntu: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precision Pangolin), 14.04 (Trusty Tahr) та 18.04 (Біонічний бобр):

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

Тому спробуйте встановити libpq-devабо його еквівалент для вашої ОС:


1
не працював для мене на 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
Якщо тоді вам потрібно встановити бібліотеку javascript ... gem install 'execjs' та gem install 'therubyracer'
Nick Woodhams

@TravisR: Дякую за оновлення, я щойно перетворив це на вікі спільноти, щоб полегшити всім оновлення.
му занадто короткий

Я використовую Ubuntu 12.10, я не в змозі встановити pg gem після встановлення libpq-dev
vedarthk

2
Перегляньте свою відповідь, щоб включити apt-get install postgres-server-dev-{pg.version} Ваша відповідь більше не працює з postgresql 9.4 на Ubuntu 14.04 Див.: Stackoverflow.com/a/28837453/75194
Ryan Rauh

168

На macOS (раніше Mac OS X і OS X ) використовуйте Homebrew для встановлення належних заголовків:

brew install postgresql

а потім біг

gem install pg

повинні працювати.

Крім того, замість того, щоб встановлювати ціле postgresql, ви можете brew install libpqекспортувати правильний PATHта, PKG_CONFIG_PATHяк пояснено, у розділі "Caveats"


5
Чи викликає це проблеми, якщо ви також використовуєте Postgres.app?
іконоборство

3
Для мене після запуску brew install postgressqlя бігаю ARCHFLAGS="-arch x86_64" gem install pgі працює чудово.
загальнадука

5
Крім того, достатньо лише запуску brew install libpqxxна Mac OSX
Рікардо Сапорта

4
@ RicardoSaporta libpqxxвстановлюється postgresqlяк залежність, тому це по суті те саме, щоbrew install postgresql
Troggy

3
Замість того, щоб встановлювати ціле postgresql, ви можете brew install libpqекспортувати правильне PATHта, PKG_CONFIG_PATHяк пояснено, у розділі "Caveats".
goetzc

118

Я також намагався робити gem install libpq-dev, але отримав цю помилку:

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

Однак я виявив, що установка за допомогою sudo apt-get(якої я намагаюся уникати використання з Ruby on Rails) працювала, тобто

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

тоді я зміг це зробити

gem install pg

без питань.


3
Правильно, gg Ruby pg обгортає звичайні бібліотеки PostgreSQL C, які постачаються з libpq-devпакетом Ubuntu / Debian / ...
му занадто короткий

46

Я міг би вирішити це іншим способом. Я не знайшов бібліотеку в своїй системі. Таким чином я встановив його за допомогою програми з головного веб-сайту PostgreSQL. У моєму випадку (OS X) я знайшов файл під/Library/PostgreSQL/9.1/include/ час встановлення закінчився. Ви також можете мати файл десь в іншому місці, залежно від вашої системи, якщо у вас вже встановлений PostgreSQL.

Завдяки цьому посиланню про те, як додати додатковий шлях для встановлення дорогоцінного каміння , я можу вказати дорогоцінний камінь на ліб за допомогою цієї команди:

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

Після цього він працює, бо тепер знає, де знайти бібліотеку, що відсутня. Просто замініть шлях на потрібне місце для свого libpq-fe.h


2
Рішення Девіда спрацювало на мене. Я відслідковував libpq-fe.h до '/Applications/Postgres.app/Contents/Versions/9.3/include' і використовував команду експорту із зазначеним шляхом, після чого 'gem install pg' та дорогоцінний камінь успішно встановлений.
Райан Спірс

Дякую за це, працювали для мене, використовуючи:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
brookr

1
Використання Postgresql 9.3 на CentOS 6 я вирішив це символічне посилання на pg_*скрипти в $ PATH наступним чином: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Я встановив postgres 9.3 так: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
Ви також можете написати якgem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445

А ще краще - використовувати export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config". pg_configВиконуваний файл буде називатися , щоб отримати всі необхідні опції компілятора і компоновщика - ви можете запустити його самостійно , щоб побачити їх.
skozin

29

Не вдається знайти заголовок libpq-fe.h

Я мав успіх у CentOS 7.0.1406, виконуючи такі команди:

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

Крім того , ви можете налаштувати bundler завжди встановлювати pgці параметри (корисно для запуску bundler у середовищах розгортання),

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

1
дуже корисно, спасибі Просто для додання примітки щодо конфігурації пакету ... Ви повинні запустити цю команду під час входу в систему як користувач, який буде виконувати наступну команду пакету. Конфігурація пакета зберігається в ~ / .bundle / config, тому його не буде знайдено, якщо ви запускаєте конфігурацію пакета під час входу в систему як корінь, але він виконує (наприклад, з capistrano) користувачем "розгортання".
Les Nightingill

3
bundle config build.pg --with-pg-config = / usr / pgsql-9.4 / bin / pg_config вирішити для мене на Centos 7
liloargana

2
bundle config build.pg --with-pg-config = / usr / pgsql-10 / bin / pg_config, якщо ви використовуєте postgresql10
Mahesh Neelakanta


17

Просто для запису:

Додаток Ruby on Rails 4 в OS X з PostgresApp (у цьому випадку потрібна версія 0.17.1 - вид старого проекту):

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

1
Чудово працює, якщо ви використовуєте чудовий Postgres.app . Для Postgres 10 я використав шлях/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
Master of Ducks

13

На Mac OS X запустіть так:

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

***/path/to/pg_config*** це шлях до pg_config


1
Отримано. Я встановив Postgresql через інсталятор Grapihcal EnterpriseDB . Тоді мені потрібно з'ясувати шлях до конфігурації pg sudo find / -name "pg_config", а потім зробити gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_configшлях, який я щойно знайшов.
Yi Zeng


10

Правильна відповідь для користувачів Mac з Postgres.app полягає в тому, щоб побудувати на основі libpqцього пакета. Наприклад, з випуском 9.4 (поточним станом на цей текст), все що вам потрібно:

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

Це дозволить pgсинхронізувати ваш дорогоцінний камінь із точно встановленою вами версією PostgreSQL. Установка чогось із Homebrew у даному випадку - марно.


9

У мене була така сама проблема в Amazon Linux. Я міг знайти заголовок libpq-fe.h, але це якось не вийшло.

Він походить від різних версій пакетів, які були встановлені різними користувачами на машині. Встановлено PostgreSQL 9.2 та PostgreSQL 9.3. Отже, переконайтеся у своїй версії PostgreSQL перед включенням бібліотек.

Для мене магічним командним рядком було:

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

Джерело: Посібник з майже ідіотів для встановлення PostgreSQL 9.3, PostGIS 2.1 та pgRouting з Yum


Після встановлення бібліотек ... зробіть очищення: "зробити distclean", "make clean", "./configure" і починайте компілювати!
mzalazar

8

Більш загальна відповідь на будь-який дистрибутив на базі Debian (який включає Ubuntu) полягає в наступному. Спочатку встановіть apt-fileпакунок, що працює як root:

apt-get install apt-file

Це дозволяє шукати пакети, що містять файл. Потім оновіть свою базу даних за допомогою

apt-file update

(це може бути запущено як звичайний користувач). Потім пошукайте заголовок, що відсутній, використовуючи:

apt-file search libpq-fe.h

На моїй машині це дає:

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

Ось так !


"libpq-dev: /usr/include/postgresql/libpq-fe.h" присутній, тоді як "postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h" є не присутній ? що я пропускаю?
furiabhavesh

Вміст файлу, можливо, змінився. Схоже, у пакеті postgres -... була приватна копія libpq-fe.h. У будь-якому випадку, libXXX-dev - це той, кого ви шукаєте, якщо хочете скласти речі.
Вінсент Фурмонд

7

Для MacOS без установки сервера PostgreSQL:

brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"

5

На Mac я вирішив це за допомогою цього коду:

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

4

Я запускаю Postgres.app на Mac, і мені довелося

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

спочатку. Тоді

bundle install

працював на мене.


4

У мене була така ж проблема в Mac OS, але я встановив дорогоцінний камінь PostgreSQL, використовуючи наступні в терміналі:

ARCHFLAGS="-arch x86_64" gem install pg

(Я спочатку встановив PostgreSQL brew install postgresql.)


4

Я знайшов цю відповідь, і це було єдине, що працювало на мене (Mac OS) - після дослідження близько двох днів:

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

Див. Запитання про переповнення стека Неможливо знайти клієнтську бібліотеку PostgreSQL (libpq) .


4

Нещодавно я перейшов на Mac OS X v10.10 (Yosemite) і зіткнувся з труднощами при створенніpg дорогоцінного каміння.

Повідомлена помилка була типовою:

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

Моє рішення полягало в gem uninstall pgтому, bundle update pgщоб замінити дорогоцінний камінь на останні. Я запустив brew update; brew upgradeпісля встановлення Yosemite, щоб отримати останні версії пакетів, які я встановив раніше.


4

На Ubuntu встановіть "libpq-dev", щоб позбутися цієї проблеми.

sudo apt-get install libpq-dev

Якщо цього недостатньо, додайте sudo apt-get install postgresqlранішеlibpq-dev
Alex

3

На CentOS я встановив libpq-dev packageза допомогою команди нижче

yum install postgresql-devel

Виконання gem install pgповернуло ту саму помилку, що і "No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config ".

Встановлення дорогоцінного каміння, як показано нижче, вирішило мою проблему

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

2

У FreeBSD (9.1) необхідним пакетом є / usr / ports / database / postgresql-сервер *, який при встановленні також встановить необхідний файл заголовка, що змусить встановити дорогоцінний камінь "pg". Ця відповідь тут допомогла мені знайти рішення, але різниця в назвах пакунків вимагала трохи пошуку.

Сподіваємось, це допоможе комусь уникнути трохи подряпин по голові під час пошуку пакету "-dev" у системі FreeBSD!


2

На Debian 7.0, 64-розрядному (Wheezy), просто запустіть:

sudo apt-get install libpq-dev

Після успішного встановлення libpq-dev, запустіть:

bundle install

2

Під CentOS 6.5 (стискаю) я створив файл:

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

зі змістом:

pathmunge /usr/pgsql-9.3/bin

Зауважте тут, вам слід встановити ваш шлях PostgreSQL за допомогою файлу pg_config. Ви можете знайти це за допомогою команди:

$ sudo find / -iname pg_config

Збережіть файл:

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

і спробуйте виконати свою команду ще раз.

Примітка. Щоразу, коли ви змінюєте конфігурацію Bash - змінюючи конфігурацію profile.d - вам слід перезавантажити Bash.


Як ви встановили postgres? Я слінкован в pg_*сценарії в дорозі приблизно так: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Після цього мені не потрібні були додаткові сценарії чи змінні середовища.
JoePasq

2

Місце розташування libpq-fe.hзалежить від того, де встановлена ​​ваша PostgreSQL (що залежить від того, як ви її встановили). Використовуйте locate( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ), щоб знайти libpq-fe.hфайл на своїй машині. Якщо він існує, він буде знаходитися в includeкаталозі установки PostgreSQL.

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

binКаталог, який містить pg_config, буде знаходитися в тому ж каталозі, що і includeкаталог. Як показує помилка, використовуйте параметр --with-pg-config, щоб встановити дорогоцінний камінь:

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

Зауважте, що вам може знадобитися запустити, updatedbякщо ви ніколи не використовували locateабо не оновлювались після встановлення PostgreSQL.


Без --цього --with-pg-config=...я отримую помилку: ПОМИЛКА: Під час виконання gem ... (OptionParser :: InvalidOption) недійсний варіант: --with-pg-config = / usr / bin / pg_config)
Alexis Wilke

2

Нарешті я вирішив цю проблему, але не використовуючи описані раніше методи.

Використовуючи brew install postgresql, я з'ясовую, що він уже встановлений, але не пов'язаний.

  1. Дізнайтеся, де встановлено PostgreSQL, і видаліть його,

  2. Потім brew install postgresqlзнову:

  3. brew link postgresql

  4. gem install pg


"Посилання заварювання - force postgresql" працювало для мене, але для того, щоб мені довелося запустити 'export PATH = "/ usr/local/opt/postgresql@9.4/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani

2

Я тільки що це було на OSX працює пивоваріння і postgres@9.4.

Моє виправлення було таким:

CONFIGURE_ARGS="with-pg-include=/usr/local/opt/postgresql@9.4/include/" bundle install

2

У мене виникла ця проблема з Postgresql 9.6. Я зміг це виправити, зробивши:

brew upgrade postgresql@9.6
brew link postgresql@9.6 --force
gem install pg

2

Я зіткнувся з такою ж помилкою з postgres, встановленими через asdf. Рішення pg-config не працювали для мене. Натомість мені довелося знайти папку postgres, включаючи папку, яка містить файл, та запустити команду із --with-pg-includeпрапором

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

1

Для AltLinuxпакета postgresqlx.x-devel(у моєму випадку postgresql9.5-devel) необхідно встановити:

apt-get install postgresql9.5-devel

Ви також можете встановити конкретні версії з yum - yum install postgresqlxx-devel, наприклад, yum install postgresql94-devel
dworrad

1

Я вирішив це, встановивши пакет "postgresql-common". Цей пакет надає pg_configдвійковий файл, який, швидше за все, пропустив.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.