Mac + virtualenv + pip + postgresql = Ошибка: исполняемый файл pg_config не найден


92

Я пытался установить 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 и не упустить
пивоварение

Ответы:


106

На 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

1
имейте в виду, что для того, чтобы он всегда применялся к текущей оболочке, необходимо добавить эту строку, .bash_profileесли используется стандартный bash терминала. ЕСЛИ, используя, zshдобавьте эту строку в .zshrcфайл. Все это вы найдете в своем домашнем каталоге. ( ls -la
Just

2
Это было примерно в миллион раз проще, чем использовать пиво.
Nate

теперь это версия 9.5! рассмотреть возможность редактирования ответа, чтобы указать текущую версию?
AZhao

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

96

На Mac решение - установить postgresql:

brew install postgresql

В CentOS решение заключается в установке postgresql-devel:

sudo yum install postgresql-devel

pg_configв postgresql-develпакете


12
Вопрос предваряет настройку "virtualenv". Я не думаю, что в этом случае уместно пиво. Похоже, это должно быть чистое решение.
Джон Хайт

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

После того, как вы установили библиотеки postgresql C, вы можете повторно запустить команду установки с ошибкой pip (это не было ясно из приведенного выше ответа).
Penguin Brian,

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
Это лучший ответ на этот вопрос.
Винод Шарма

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"если вы хотите использовать последнюю установленную версию Postgres
jaynp 08

19

Не забывайте, что ваша переменная $ PATH в виртуальной среде! = Ваша глобальная переменная $ PATH. Вы можете подтвердить это с помощью 'echo $ PATH' в вашем виртуальном окружении, а также в новой оболочке. Итак, если вы не хотите установить PostgreSQL в качестве уникального экземпляра в своей виртуальной среде (что не стоит делать, я думаю), вам необходимо изменить переменную $ 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, поскольку он означает, что я могу легко использовать базу данных в любом виртуальном окружении, а не только в определенной виртуальной среде.

Надеюсь, это поможет любому, кто сюда приедет. Для сока Google вот явный (и расплывчатый) язык ошибки, возвращаемый при столкновении с этой проблемой:
Команда 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

Это похоже на решение Mingyu , но есть достаточно различий, которыми, как мне казалось, стоит поделиться.


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 dev:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.