Mac + virtualenv + pip + postgresql = Помилка: виконуваний файл pg_config не знайдено


91

Я намагався встановити postgres для підручника, але pipвидає помилку:

pip install psycopg

Я отримую фрагмент помилки:

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

Де pg_configв моєму virtualenv? Як його налаштувати? Я використовую virtualenv, тому що не хочу загальносистемної установки postgres.


Я тільки один, який надав відповідну відповідь , як мати справу з ним , використовуючи virtualenv і не вистачає з заварний і т.д. Див: stackoverflow.com/questions/20170895 / ...
andilabs

Відповіді:


104

На Mac, якщо ви використовуєте Postgres.app , файл pg_config знаходиться у вашому /Applications/Postgres.app/Contents/Versions/<current_version>/binкаталозі. Це потрібно буде додати до системного шляху, щоб виправити цю помилку, наприклад:

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

Наприклад, якщо поточною версією Postgres.app є 9.5, цей рядок експорту буде таким:

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

У новіших версіях Postgres.app (> 9,5?) Ви можете просто додати "останню" замість номера версії, наприклад:

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

5
зверніть увагу, що версія з часом зміниться; зараз це його9.4
andilabs 02

1
пам’ятайте, що для того, щоб його застосовувати завжди до поточної оболонки, потрібно додати цей рядок, .bash_profileякщо використовується bash стандартного терміналу. ЯКЩО за допомогою zshдодати цей рядок до .zshrcфайлу. Все це ви знайдете у своєму домашньому каталозі. (просто ls -la)
andilabs

2
Це було приблизно в мільйон разів простіше, ніж використання браги.
Нейт

тепер це версія 9.5! подумайте про редагування відповіді, сказавши поточну версію?
AZhao

6
ви можете замінити <current_version>з latestякої вказує на останню встановлену версію Postgres. Моя папка виглядає так: ls /Applications/Postgres.app/Contents/Versions/і це дає9.5/ latest/
Реймонд

96

На Mac вирішення проблеми полягає у встановленні postgresql:

brew install postgresql

Рішенням на CentOS є встановлення postgresql-devel:

sudo yum install postgresql-devel

pg_configє в postgresql-develупаковці


11
Питання передмовляє до налаштування "virtualenv". Я не вважаю, що варити в цьому випадку доречно. Здається, це має бути чисте піп-рішення.
Джон Хайт

psycopg - це прив’язка до бібліотеки C, тому вам доведеться встановити бібліотеку C. Неможливо (AFAIK) встановити власні бібліотеки C у virtualenvs.
Пінгвін Брайан

Після того, як ви встановили бібліотеки postgresql C, ви можете повторно виконати невдалу команду pip install (це не було зрозуміло з наведеної вище відповіді).
Пінгвін Брайан

33

Я повністю погоджуюсь з Джоном Хайтом, що більшість розміщених відповідей абсолютно нетопічні, припускаючи, що OP точно вказав необхідність використання virtualenv .

Для мене відповідь полягала в наступній команді під час активації virtualenv:

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

(зверніть увагу, що частина 9.4 означає версію і може відрізнятися)

або якщо ви хочете використовувати останню встановлену версію Postgres:

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

і потім:

pip install psycopg2

йде успішно, припускаючи, що ви встановили postgres. А якщо ні, то пам’ятайте, що найкращим та рекомендованим рішенням є використання: Postgres.app


3
Це найкраща відповідь на це питання.
Vinod Sharma

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"якщо ви хочете скористатися останньою встановленою версією Postgres
jaynp

19

Не забувайте, що ваша змінна $ PATH у віртуальному середовищі! = Ваша глобальна змінна $ PATH. Ви можете підтвердити це за допомогою 'echo $ PATH' у вашому virtualenv, а також у новій оболонці. Отже, якщо ви не хочете встановити PostgreSQL як унікальний екземпляр у вашому віртуальному середовищі (не те, що варто робити, imo), вам потрібно буде змінити змінну $ PATH у virtualenv, щоб включити шлях до вашої глобальної інсталяції (що буде вирішити вашу відсутність помилки pg_config).

Ось кроки:

1.) У новій оболонці введіть 'which pg_config'. Це поверне шлях. Скопіюйте його. У моєму випадку шлях виглядав так: /Applications/Postgres.app/Contents/Versions/9.3/bin

2.) Назад у вашій оболонці virtualenv введіть 'export PATH = / your-path-to-pg_config: $ PATH'

3.) Потім, все ще у virtualenv, 'pip install psycopg2'

Якщо все піде за планом, це встановить psycopg2 у віртуальному середовищі, але установка стосуватиметься вашої інсталяції Global PostgreSQL. У моєму випадку ця глобальна установка була встановлена ​​через Postgres.App, отже, і шлях. Я віддаю перевагу цьому методу роботи з psycopg2, оскільки це означає, що я можу легко використовувати базу даних у будь-якому virtualenv, а не лише у визначеному віртуальному середовищі.

Сподіваюся, це допоможе кожному, хто сюди прибуде. Для Google juice, ось явна (і розпливчаста) мова помилок, що повертається, коли ви стикаєтесь із цією проблемою:
Не вдалося виконати команду python setup.py egg_info із кодом помилки 1


2
Тим не менше, я думаю, що питання передбачає "унікальний екземпляр всередині" virtualenv. Я все ще шукаю рішення, яке встановлює pg у virtualenv.
Джон Хайт

Ти справжній чемпіон і врятував мій день.
Хафіз Сіддік

10

Ось як я зміг вирішити цю проблему на своєму Mac (OSX 10.9):

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

Я спробував помилку CLANG при спробі pip install psycopg( випуск LLVM 5.1 ), тому мені довелося встановити psycopg за допомогою цієї команди:

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

Це схоже на рішення Мінгю , але є достатньо відмінностей, якими я вважав, що варто поділитися ними.


2
+1 працював у мене. Не можу повірити, що мені потрібно вказати спеціальний прапор компілятору C, щоб налаштувати середовище розробки postgres + python на MacOS ...
Andomar

1
Питання передмовляє до налаштування "virtualenv". Я не вважаю, що варити в цьому випадку доречно. Здається, це має бути чисте піп-рішення.
Джон Хайт

5

Ця помилка виникає, коли засоби побудови не можуть знайти бібліотеки Postgresql.

Часто потрібно проінструктувати psycopg2, як знайти двійковий файл pg_config, ви можете:

  1. додайте шлях до pg_config у своєму шляху до оболонки (/ usr / local / pgsql / bin /)

  2. або відредагуйте файл setup.cfg у вихідній папці psycopg2 та надайте повний шлях до pg_config у рядку, який починається з pg_config =

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

  • вище наведений приклад, ви можете зробити, locate pg_configщоб дізнатись, де він знаходиться, або просто ввести, which pg_configі він повинен вказати вам шлях.

Рідше помилка виникає через те, що у вашій системі не встановлено postgresql. Якщо так, завантажте та побудуйте postgres або завантажте попередньо побудований двійковий файл psycopg2 для OS X.


1
Звичайно ... але як же це зробити за допомогою virtualenv і не залежати від загальносистемної установки pg?
Джон Хайт

4

Для OS X El Capitan (10.11.6)+ brew+ virtualenv+PostgreSQL 9.5 :

Після встановлення PostgreSQL 9.5:

brew install postgresql@9.5

Потім відкрийте термінал і виконайте:

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


2

virtualenv призначений для пакетів python. Я не думаю, що ви зможете містити postgres всередині virtualenv. Повідомлення про помилку, яке ви бачите, можливо, тому, що ви ще не встановили postgres. Сценарій встановлення psycopg2 шукає файли postgres (в даному випадку pg_config) і не знаходить їх, оскільки він не встановлений. postgres неможливо встановити за допомогою pip або virtualenv.


1
можливо встановити postgresql у virtualenv, і часто ця помилка є проблемою шляху, незалежно від встановленого postgresql.
l'L'l

1
@HolyMackerel, дякую за найрелевантнішу відповідь. Будь-які подробиці, чому ви не можете встановити psycopg2 / pg у virtualenv?
Джон Хайт

1
postgres не має нічого спільного з python. Вони бігають окремо, але розмовляють між собою.
Біото


1

На додаток до відповідей, наданих @bkev та @andi, згідно з документацією на Postgres.app, ви повинні додати до свого bash_profile на Mac наступне:

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

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


1

Якщо ви використовуєте postgresql 9.4, файл знаходиться в

/usr/pgsql-9.4/bin/pg_config

Назва пакету:

postgresql94-9.4.9-1PGDG.rhel6.x86_64

щоб додати pg_config до вашого PATH, виконайте наступне

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

1

Якщо вам не потрібно спеціально використовувати psycopgдрайвер, перейдіть до pg8000драйвера. Це чистий Python і менш вибагливий.


0

На Ubuntu мені просто потрібен пакет розробників postgres:

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

0

Мій файл знаходився в /Library/PostgreSQL/9.4/bin

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