Mac + virtualenv + pip + postgresql = Błąd: nie znaleziono pliku wykonywalnego pg_config


91

Próbowałem zainstalować postgres dla samouczka, ale pipwyświetla mi się błąd:

pip install psycopg

Fragment błędu, który otrzymuję:

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

Gdzie jest pg_configmój virtualenv? Jak to skonfigurować? Używam virtualenv, ponieważ nie chcę instalacji postgres w całym systemie.


Jako jedyny udzieliłem
— trafnej

Odpowiedzi:


105

Na komputerze Mac, jeśli używasz Postgres.app , plik pg_config znajduje się w twoim /Applications/Postgres.app/Contents/Versions/<current_version>/binkatalogu. Będzie trzeba to dodać do ścieżki systemowej, aby naprawić ten błąd, na przykład:

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

Na przykład, jeśli aktualna wersja Postgres.app to 9.5, ten wiersz eksportu będzie wyglądał tak:

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

W nowszych wersjach Postgres.app (> 9.5?) Możesz po prostu dodać „najnowszą” zamiast numeru wersji, na przykład:

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

5
zauważ, że wersja zmieni się z czasem; teraz to jest9.4
— andilabs

1
należy pamiętać, że aby był on stosowany zawsze do bieżącej powłoki, wymaga dodania tej linii, .bash_profilejeśli używasz standardowego bash Terminala. JEŚLI używasz, zshdołącz tę linię do .zshrcpliku. Wszystko to znajdziesz w swoim katalogu domowym. (po prostu ls -la)
— andilabs

2
Było to milion razy łatwiejsze niż użycie naparu.
— Nate

teraz jest to wersja 9.5! rozważyć edycję odpowiedzi, aby podać aktualną wersję?
— AZhao

6
można zastąpić <current_version>z latestktórych punkty do najnowszej zainstalowanej wersji PostgreSQL. Mój folder wygląda tak: ls /Applications/Postgres.app/Contents/Versions/i daje9.5/ latest/
— Raymond

96

Na Macu rozwiązaniem jest zainstalowanie postgresql:

brew install postgresql

W CentOS rozwiązaniem jest instalacja postgresql-devel:

sudo yum install postgresql-devel

pg_configjest w postgresql-developakowaniu


12
Pytanie poprzedza konfigurację „virtualenv”. Nie wierzę, że w tym przypadku napar jest odpowiedni. Wygląda na to, że powinien to być czysty roztwór pip.
— john hight

psycopg jest dowiązaniem do biblioteki C, więc musisz mieć zainstalowaną bibliotekę C. Nie jest możliwe (AFAIK) zainstalowanie natywnych bibliotek C w virtualenvach.
— Penguin Brian

Po zainstalowaniu bibliotek C postgresql możesz ponownie uruchomić polecenie pip install, które kończy się niepowodzeniem (nie zostało to wyjaśnione w powyższej odpowiedzi).
— Penguin Brian

33

Całkowicie zgadzam się z Johnem Hightem, że większość opublikowanych odpowiedzi jest całkowicie offtopic, przy założeniu, że OP ma dokładnie określoną potrzebę użycia virtualenv .

Dla mnie odpowiedzią było uruchomienie następującego polecenia w wierszu polecenia podczas aktywacji virtualenv:

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

(zauważ, że część 9.4 oznacza wersję i może się różnić)

lub jeśli chcesz korzystać z najnowszej zainstalowanej wersji Postgres:

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

i wtedy:

pip install psycopg2

idzie pomyślnie, zakładając, że zainstalowałeś postgres. A jeśli nie, to pamiętaj, że najlepszym i polecanym rozwiązaniem jest użycie: Postgres.app


3
To najlepsza odpowiedź na to pytanie.
— Vinod Sharma,

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"jeśli chcesz korzystać z najnowszej zainstalowanej wersji Postgres
— jaynp

19

Nie zapominaj, że zmienna $ PATH w środowisku wirtualnym! = Twoja globalna zmienna $ PATH. Możesz to potwierdzić za pomocą 'echo $ PATH' w swoim virtualenv, a także w nowej powłoce. Tak więc, jeśli nie chcesz zainstalować PostgreSQL jako unikalnej instancji w swoim wirtualnym środowisku (nie jest to rzecz warta robienia, imo), będziesz musiał zmodyfikować zmienną $ PATH w virtualenv, aby uwzględnić ścieżkę do swojej globalnej instalacji (która Rozwiąż brakujący błąd pg_config).

Oto kroki:

1.) W nowej powłoce wpisz „which pg_config”. To zwróci ścieżkę. Skopiuj to. W moim przypadku ścieżka wyglądała tak: /Applications/Postgres.app/Contents/Versions/9.3/bin

2.) Z powrotem w powłoce virtualenv wpisz „export PATH = / twoja-ścieżka-do-pg_config: $ PATH”

3.) Następnie, nadal w virtualenv, „pip install psycopg2”

Jeśli wszystko pójdzie zgodnie z planem, spowoduje to zainstalowanie psycopg2 w środowisku wirtualnym, ale instalacja będzie się odnosić do instalacji Global PostgreSQL. W moim przypadku ta globalna instalacja została zainstalowana przez Postgres.App, stąd ścieżka. Wolę tę metodę pracy z psycopg2, ponieważ oznacza to, że mogę łatwo korzystać z bazy danych w dowolnym virtualenv, a nie tylko w zdefiniowanym środowisku wirtualnym.

Mam nadzieję, że pomoże to każdemu, kto tu przyjedzie. W przypadku Google Juice, oto wyraźny (i niejasny) język błędu zwracany po napotkaniu tego problemu:
Polecenie python setup.py egg_info nie powiodło się z kodem błędu 1


2
Mimo to myślę, że to pytanie sugeruje „unikalną instancję wewnątrz” virtualenv. Wciąż szukam rozwiązania, które zostanie zainstalowane w virtualenv.
— john hight

Jesteś prawdziwym mistrzem i uratowałeś mi dzień.
— Hafiz Siddiq

10

Oto, jak udało mi się rozwiązać ten problem na moim komputerze Mac (OSX 10.9):

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

Otrzymałem błąd CLANG, kiedy próbowałem pip install psycopg( problem z LLVM 5.1 ), więc zamiast tego musiałem zainstalować psycopg za pomocą tego polecenia:

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

Jest podobny do rozwiązania Mingyu , ale jest wystarczająco dużo różnic, o których pomyślałem, że warto się nimi podzielić.


2
+1 zadziałało dla mnie. Nie mogę uwierzyć, że muszę określić niestandardową flagę dla kompilatora C, aby skonfigurować środowisko programistyczne postgres + python na MacOS ...
— Andomar

1
Pytanie poprzedza konfigurację „virtualenv”. Nie wierzę, że w tym przypadku napar jest odpowiedni. Wygląda na to, że powinien to być czysty roztwór pip.
— john hight

5

Ten błąd pojawia się, gdy narzędzia do kompilacji nie mogą znaleźć bibliotek Postgresql.

Często wymagane jest poinstruowanie psycopg2, jak znaleźć plik binarny pg_config, możesz:

  1. dodaj ścieżkę do pg_config w ścieżce do powłoki (/ usr / local / pgsql / bin /)

  2. lub edytuj plik setup.cfg w katalogu źródłowym psycopg2 i podaj pełną ścieżkę do pg_config w wierszu zaczynającym się od pg_config =

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

  • powyższy przykład jest przykładem, który możesz zrobić, locate pg_configaby dowiedzieć się, gdzie się znajduje, lub po prostu wpisz, which pg_configa powinno wskazać ścieżkę.

Rzadziej błąd wynika z braku zainstalowanego postgresql w systemie. Jeśli tak, pobierz i skompiluj postgres lub pobierz wstępnie skompilowany plik binarny psycopg2 dla OS X.


1
Jasne ... ale jak to zrobić w virtualenv i nie być zależnym od ogólnosystemowej instalacji pg?
— john hight

4

Dla OS X El Capitan (10.11.6)+ brew+ virtualenv+ PostgreSQL 9.5:

Po zainstalowaniu PostgreSQL 9.5:

brew install postgresql@9.5

Następnie otwórz terminal i wykonaj:

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

4

musisz skonfigurować ścieżkę postgresql:

export PATH=$PATH:/Library/PostgreSQL/11/bin

potem musisz zainstalować wymagania:

pip3 install -r requirements

2

virtualenv jest przeznaczony dla pakietów Pythona. Nie sądzę, abyś mógł zawierać postgresy w virtualenv. Komunikat o błędzie, który widzisz, jest prawdopodobnie spowodowany tym, że nie zainstalowałeś jeszcze Postgres. Skrypt instalacyjny psycopg2 szuka plików postgres (w tym przypadku pg_config) i nie znajduje ich, ponieważ nie jest zainstalowany. Postgres nie może być zainstalowany przy użyciu pip ani virtualenv.


1
możliwe jest zainstalowanie postgresql w virtualenv i często ten błąd jest problemem ze ścieżką, niezależnie od zainstalowanego postgresql.
— L'L'l

1
@HolyMackerel, dzięki za najbardziej trafną odpowiedź. Jakieś szczegóły dotyczące tego, dlaczego nie można zainstalować psycopg2 / pg w virtualenv?
— john hight

1
postgres nie ma nic wspólnego z Pythonem. Biegają osobno, ale rozmawiają ze sobą.
— Bioto


1

Oprócz odpowiedzi udzielonych przez @bkev i @andi, zgodnie z dokumentacją na Postgres.app, powinieneś dodać następujące informacje do swojego bash_profile na Macu:

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

Zauważ, że nie ma zakodowanego numeru wersji. Chciałem to dodać jako komentarz do powyższych odpowiedzi, ale nie mam na to wystarczającego przedstawiciela.


1

Jeśli używasz postgresql 9.4, plik znajduje się w

/usr/pgsql-9.4/bin/pg_config

Nazwa pakietu to

postgresql94-9.4.9-1PGDG.rhel6.x86_64

aby dodać pg_config do swojej PATH, wykonaj następujące czynności

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

1

Jeśli nie musisz specjalnie używać psycopgsterownika, przełącz się na pg8000sterownik. To czysty Python i mniej wybredny.


0

W Ubuntu potrzebowałem tylko pakietu deweloperskiego postgres:

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

0

Mój znajdował się w /Library/PostgreSQL/9.4/bin

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.