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.

KGo
źródło
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
bkev
źródło
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

Mingyu
źródło
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

andilabs
źródło
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

Kevin Dalias
źródło
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ć.

mrgnw
źródło
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.

l'l'l
źródło
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
valex
źródło
4

musisz skonfigurować ścieżkę postgresql:

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

potem musisz zainstalować wymagania:

pip3 install -r requirements
Diego Santa Cruz Mendezú
źródło
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.

Święta makrela
źródło
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.

Turgut Sarıçam
źródło
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/
Ahmed
źródło
1

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

Chris Johnson
źródło
0

W Ubuntu potrzebowałem tylko pakietu deweloperskiego postgres:

sudo apt-get install postgresql-server-dev-all
marcanuy
źródło
0

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

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
InternetFett
źródło