Mac + virtualenv + pip + postgresql = Errore: eseguibile pg_config non trovato


91

Stavo cercando di installare postgres per un tutorial, ma pipmi dà un errore:

pip install psycopg

Un pizzico di errore ottengo:

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

Dov'è pg_confignel mio virtualenv? Come configurarlo? Sto usando virtualenv perché non voglio un'installazione a livello di sistema di postgres.


Io sono l'unico, che ha fornito una risposta rilevante come trattare con esso usando virtualenv e non manca il passo con birra ecc See: stackoverflow.com/questions/20170895/...
andilabs

Risposte:


105

Su Mac, se stai usando Postgres.app , il file pg_config si trova nella tua /Applications/Postgres.app/Contents/Versions/<current_version>/bindirectory. Dovrà essere aggiunto al percorso di sistema per correggere questo errore, in questo modo:

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

Quindi, ad esempio, se la versione corrente di Postgres.app è 9.5, questa riga di esportazione sarebbe:

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

Con le versioni più recenti di Postgres.app (> 9.5?), Puoi semplicemente aggiungere "latest" al posto del numero di versione, in questo modo:

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

5
notare che la versione cambierà nel tempo; ora è9.4
andilabs

1
essere consapevoli del fatto che per applicarlo sempre alla shell corrente è necessario aggiungere questa riga .bash_profilese si utilizza la bash standard di Terminal. SE utilizzando zshaggiungi questa riga al .zshrcfile. Tutto questo lo troverai nella tua home directory. (solo ls -la)
andilabs

2
Questo era circa un milione di volte più facile che usare la birra.
Nate

ora è la versione 9.5! considerare di modificare la risposta per dire la versione corrente?
AZhao

6
puoi sostituire <current_version>con latestquali punti l'ultima versione di Postgres installata. La mia cartella assomiglia a: ls /Applications/Postgres.app/Contents/Versions/e dà9.5/ latest/
Raymond

96

Su Mac, la soluzione è installare postgresql:

brew install postgresql

Su CentOS, la soluzione è installare postgresql-devel:

sudo yum install postgresql-devel

pg_configè nel postgresql-develpacchetto


12
La domanda precede una configurazione "virtualenv". Non credo che la birra sia appropriata in questo caso. Sembra che dovrebbe essere una soluzione pip pura.
john hight

psycopg è un collegamento alla libreria C, quindi sarà necessario installare la libreria C. Non è possibile (AFAIK) installare librerie C native in virtualenvs.
Penguin Brian,

Dopo aver installato le librerie C postgresql, è possibile eseguire nuovamente il comando di installazione pip non riuscito (ciò non è stato chiarito dalla risposta sopra).
Penguin Brian

33

Sono totalmente d'accordo con John Hight sul fatto che la maggior parte delle risposte pubblicate sono totalmente offtopiche, assumendo che l'OP abbia esattamente la necessità di usare virtualenv .

Per me la risposta stava eseguendo il seguente comando nel prompt mentre avevo attivato virtualenv:

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

(notare che la parte 9.4 sta per versione e può variare)

o se desideri utilizzare l'ultima versione installata di Postgres:

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

e poi:

pip install psycopg2

va bene assumendo che tu abbia installato postgres. In caso contrario, ricorda che la soluzione migliore e consigliata è utilizzare: Postgres.app


3
Questa è la migliore risposta a questa domanda.
Vinod Sharma,

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"se si desidera utilizzare l'ultima versione installata di Postgres
jaynp

19

Non dimenticare che la tua variabile $ PATH nell'ambiente virtuale! = La tua variabile $ PATH globale. Puoi confermarlo con 'echo $ PATH' nel tuo virtualenv e anche in una nuova shell. Quindi, a meno che tu non voglia installare PostgreSQL come un'istanza unica all'interno del tuo ambiente virtuale (cosa che non vale la pena fare, imo), dovrai modificare la variabile $ PATH all'interno di virtualenv per includere il percorso della tua installazione globale (che sarà risolvi l'errore pg_config mancante).

Ecco i passaggi:

1.) In una nuova shell, digita "which pg_config". Questo restituirà il percorso. Copialo. Nel mio caso, il percorso era così: /Applications/Postgres.app/Contents/Versions/9.3/bin

2.) Torna nella tua shell virtualenv, digita 'export PATH = / your-path-to-pg_config: $ PATH'

3.) Quindi, sempre all'interno di virtualenv, "pip install psycopg2"

Se tutto va secondo i piani, questo installerà psycopg2 nell'ambiente virtuale, ma l'installazione farà riferimento alla tua installazione Global PostgreSQL. Nel mio caso, questa installazione globale è stata installata tramite Postgres.App, da cui il percorso. Preferisco questo metodo di lavorare con psycopg2 in quanto significa che posso utilizzare facilmente il database all'interno di qualsiasi virtualenv piuttosto che solo all'interno dell'ambiente virtuale definito.

Spero che questo aiuti chiunque arrivi qui. Per Google Juice, ecco il linguaggio di errore esplicito (e vago) restituito quando si verifica questo problema:
Comando python setup.py egg_info non riuscito con codice di errore 1


2
Tuttavia, penso che la domanda implichi una "istanza unica all'interno" di virtualenv. Sto ancora cercando una soluzione che ottenga pg installato all'interno di virtualenv.
john hight

Sei il vero campione e mi hai salvato la giornata.
Hafiz Siddiq

10

Ecco come sono riuscito a risolvere questo problema sul mio Mac (OSX 10.9):

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

Ho ricevuto un errore CLANG quando ho provato pip install psycopg(un problema di LLVM 5.1 ), quindi ho dovuto installare psycopg con questo comando:

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

È simile alla soluzione di Mingyu , ma ci sono abbastanza differenze che ho pensato valesse la pena condividere.


2
+1 ha funzionato per me. Non riesco a credere di dover specificare un flag personalizzato a un compilatore C per configurare un ambiente di sviluppo postgres + python su MacOS ...
Andomar

1
La domanda precede una configurazione "virtualenv". Non credo che la birra sia appropriata in questo caso. Sembra che dovrebbe essere una soluzione pip pura.
john hight

5

Questo errore si verifica quando gli strumenti di compilazione non riescono a trovare le librerie Postgresql.

Spesso è necessario istruire psycopg2 su come trovare il binario pg_config, puoi:

  1. aggiungi il percorso a pg_config nel percorso della shell (/ usr / local / pgsql / bin /)

  2. oppure modifica il file setup.cfg nella cartella sorgente di psycopg2 e fornisci il percorso completo di pg_config nella riga che inizia con pg_config =

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

  • quanto sopra è un esempio, puoi fare locate pg_configper scoprire dove risiede, o semplicemente digita which pg_confige dovrebbe dirti il ​​percorso.

Meno spesso l'errore deriva dal non avere postgresql installato sul tuo sistema. In tal caso, scarica e crea postgres o scarica un file binario psycopg2 predefinito per OS X.


1
Certo ... ma come puoi farlo all'interno di un virtualenv e non essere dipendente da un'installazione di pg a livello di sistema?
john hight

4

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

Dopo l'installazione PostgreSQL 9.5:

brew install postgresql@9.5

Quindi, apri il tuo terminale ed esegui:

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

4

devi configurare il percorso postgresql:

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

dopo, è necessario installare i requisiti:

pip3 install -r requirements

2

virtualenv è per i pacchetti python. Non credo che sarai in grado di contenere postgres all'interno di un virtualenv. Il messaggio di errore visualizzato è presumibilmente perché non hai ancora installato postgres. Lo script di installazione di psycopg2 cerca i file postgres (in questo caso pg_config) e non li trova perché non è installato. postgres non può essere installato utilizzando pip o virtualenv.


1
è possibile installare postgresql in un virtualenv e spesso questo errore è un problema di percorso, indipendentemente dall'installazione di postgresql.
l'L'l

1
@HolyMackerel, grazie per la risposta più pertinente. Qualche dettaglio da offrire sul motivo per cui non è possibile installare psycopg2 / pg all'interno di virtualenv?
john hight

1
postgres non ha nulla a che fare con python. Corrono separatamente ma parlano tra loro.
Bioto


1

Oltre alle risposte fornite da @bkev e @andi, secondo la documentazione su Postgres.app, dovresti aggiungere quanto segue al tuo bash_profile su Mac:

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

Notare che non esiste un numero di versione hardcoded. Volevo aggiungere questo come commento alle risposte sopra, ma non ho abbastanza rappresentante per questo.


1

Se stai usando postgresql 9.4, il file si trova in

/usr/pgsql-9.4/bin/pg_config

Il nome del pacchetto è

postgresql94-9.4.9-1PGDG.rhel6.x86_64

per aggiungere pg_config al tuo PERCORSO, procedi come segue

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

1

Se non è necessario utilizzare il psycopgdriver in modo specifico, passare al pg8000driver. È puro Python e meno schizzinoso.


0

Su Ubuntu avevo solo bisogno del pacchetto di sviluppo postgres:

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

0

Il mio si trovava in /Library/PostgreSQL/9.4/bin

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.