Mac + virtualenv + pip + postgresql = Fehler: Die ausführbare Datei pg_config wurde nicht gefunden


89

Ich habe versucht, postgres für ein Tutorial zu installieren, aber es pipwird mir ein Fehler angezeigt :

pip install psycopg

Ein Fehler, den ich bekomme:

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

Wo ist pg_configin meiner virtuellen Umgebung? Wie konfiguriere ich es? Ich verwende virtualenv, weil ich keine systemweite Installation von postgres möchte.


Ich bin der einzige, der eine relevante Antwort gegeben hat, wie man mit virtualenv damit umgeht und nicht mit Brauen usw. auskommt
andilabs

Antworten:


103

Wenn Sie auf dem Mac Postgres.app verwenden , befindet sich die Datei pg_config in Ihrem /Applications/Postgres.app/Contents/Versions/<current_version>/binVerzeichnis. Das muss Ihrem Systempfad hinzugefügt werden, um diesen Fehler wie folgt zu beheben:

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

Wenn die aktuelle Postgres.app-Version beispielsweise 9.5 ist, lautet diese Exportzeile:

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

Bei neueren Versionen von Postgres.app (> 9.5?) Können Sie einfach "Neueste" anstelle der Versionsnummer hinzufügen, wie folgt:

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

5
Beachten Sie, dass sich die Version mit der Zeit ändert. jetzt ist es sein9.4
andilabs

1
Beachten Sie, dass für die Anwendung auf die aktuelle Shell diese Zeile hinzugefügt werden muss, .bash_profilewenn Sie die Bash des Standardterminals verwenden. WENN Sie zshdiese Zeile an die .zshrcDatei anhängen . All dies finden Sie in Ihrem Home-Verzeichnis. (nur ls -la)
Andilabs

2
Dies war ungefähr eine Million Mal einfacher als die Verwendung von Gebräu.
Nate

jetzt ist es version 9.5! Überlegen Sie, die Antwort zu bearbeiten, um die aktuelle Version zu sagen?
AZhao

6
Sie können ersetzen, <current_version>durch latestwelche Punkte auf die zuletzt installierte Postgres-Version verwiesen wird. Mein Ordner sieht aus wie: ls /Applications/Postgres.app/Contents/Versions/und es gibt9.5/ latest/
Raymond

94

Auf einem Mac besteht die Lösung darin, Folgendes zu installieren postgresql:

brew install postgresql

Unter CentOS besteht die Lösung darin, Folgendes zu installieren postgresql-devel:

sudo yum install postgresql-devel

pg_configist im postgresql-develPaket


11
Die Frage beginnt mit einem "virtualenv" -Setup. Ich glaube nicht, dass Gebräu in diesem Fall angemessen ist. Scheint, als sollte es eine reine Pip-Lösung sein.
John Heights

psycopg ist eine Bindung an die C-Bibliothek, daher muss die C-Bibliothek installiert sein. Es ist nicht möglich (AFAIK), native C-Bibliotheken in virtuellen Umgebungen zu installieren.
Pinguin Brian

Nachdem Sie die postgresql C-Bibliotheken installiert haben, können Sie den fehlgeschlagenen Befehl pip install erneut ausführen (dies wurde durch die obige Antwort nicht deutlich gemacht).
Pinguin Brian

32

Ich stimme John Hight voll und ganz zu, dass die meisten veröffentlichten Antworten völlig offtopisch sind, vorausgesetzt, das OP hat genau angegeben, dass virtualenv verwendet werden muss .

Für mich lief die Antwort wie folgt in der Eingabeaufforderung, während virtualenv aktiviert wurde:

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

(Beachten Sie, dass Teil 9.4 für Version steht und variieren kann)

oder wenn Sie die neueste installierte Version von Postgres verwenden möchten :

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

und dann:

pip install psycopg2

geht erfolgreich voraus, wenn Sie postgres installiert haben. Wenn nicht, denken Sie daran, dass die beste und empfohlene Lösung die Verwendung von Postgres.app ist


2
Dies ist die beste Antwort auf diese Frage.
Vinod Sharma

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"Wenn Sie die neueste installierte Version von Postgres verwenden
möchten

19

Vergessen Sie nicht, dass Ihre $ PATH-Variable in der virtuellen Umgebung! = Ihre globale $ PATH-Variable ist. Sie können dies mit 'echo $ PATH' in Ihrer virtuellen Umgebung und auch in einer neuen Shell bestätigen. Sofern Sie PostgreSQL nicht als eindeutige Instanz in Ihrer virtuellen Umgebung installieren möchten (imo nicht sinnvoll), müssen Sie die Variable $ PATH in der virtuellen Umgebung so ändern, dass sie den Pfad zu Ihrer globalen Installation enthält (was auch der Fall ist) Beheben Sie Ihren fehlenden pg_config-Fehler.

Hier sind die Schritte:

1.) Geben Sie in einer neuen Shell 'which pg_config' ein. Dies gibt den Pfad zurück. Kopiere es. In meinem Fall sah der Pfad folgendermaßen aus: /Applications/Postgres.app/Contents/Versions/9.3/bin

2.) Geben Sie in Ihrer virtualenv-Shell 'export PATH = / your-path-to-pg_config: $ PATH' ein.

3.) Dann, immer noch in der virtuellen Umgebung, 'pip install psycopg2'

Wenn alles nach Plan verläuft, wird psycopg2 in der virtuellen Umgebung installiert, die Installation bezieht sich jedoch auf Ihre globale PostgreSQL-Installation. In meinem Fall wurde diese globale Installation über Postgres.App installiert, daher der Pfad. Ich bevorzuge diese Methode der Arbeit mit psycopg2, da ich die Datenbank problemlos in jeder virtuellen Umgebung verwenden kann und nicht nur in der definierten virtuellen Umgebung.

Hoffe das hilft jedem, der hier ankommt. Für Google Juice ist hier die explizite (und vage) Fehlersprache angegeben, die zurückgegeben wird, wenn Sie auf dieses Problem stoßen : Der
Befehl python setup.py egg_info ist mit Fehlercode 1 fehlgeschlagen


2
Dennoch denke ich, dass die Frage eine "einzigartige Instanz innerhalb" von virtualenv impliziert. Ich bin immer noch auf der Suche nach einer Lösung, mit der pg in virtualenv installiert wird.
John Heights

Du bist der wahre Champion und hast meinen Tag gerettet.
Hafiz Siddiq

10

So konnte ich dieses Problem auf meinem Mac (OSX 10.9) lösen:

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

Ich habe beim Versuch einen CLANG-Fehler erhalten pip install psycopg(ein LLVM 5.1-Problem ), daher musste ich stattdessen psycopg mit diesem Befehl installieren:

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

Es ähnelt der Lösung von Mingyu , aber es gibt genug Unterschiede, von denen ich dachte, dass es sich lohnt, sie zu teilen.


2
+1 Hat für mich gearbeitet. Ich kann nicht glauben, dass ich einem C-Compiler ein benutzerdefiniertes Flag geben muss, um eine Postgres + Python-Entwicklungsumgebung unter MacOS
einzurichten

1
Die Frage beginnt mit einem "virtualenv" -Setup. Ich glaube nicht, dass Gebräu in diesem Fall angemessen ist. Scheint, als sollte es eine reine Pip-Lösung sein.
John Heights

5

Dieser Fehler wird verursacht, wenn die Build-Tools die Postgresql-Bibliotheken nicht finden können.

Oft ist es erforderlich, psycopg2 anzuweisen, wie die Binärdatei pg_config zu finden ist. Sie können:

  1. Fügen Sie den Pfad zu pg_config in Ihrem Shell-Pfad hinzu (/ usr / local / pgsql / bin /).

  2. oder bearbeiten Sie die Datei setup.cfg im Quellordner psycopg2 und geben Sie den vollständigen Pfad zu pg_config in der Zeile an, die mit pg_config = beginnt

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

  • Das obige Beispiel ist ein Beispiel, mit dem Sie locate pg_configherausfinden können, wo es sich befindet, oder einfach eingeben which pg_configund den Pfad angeben sollten.

Weniger häufig ist der Fehler darauf zurückzuführen, dass postgresql nicht auf Ihrem System installiert ist. Wenn ja, laden Sie postgres herunter und erstellen Sie es, oder laden Sie eine vorgefertigte psycopg2-Binärdatei für OS X herunter.


1
Sicher ... aber wie macht man das innerhalb einer virtuellen Umgebung und ist nicht abhängig von einer systemweiten Installation von pg?
John Heights

4

Für OS X El Capitan (10.11.6)+ brew+ virtualenv+ PostgreSQL 9.5:

Nach der Installation PostgreSQL 9.5:

brew install postgresql@9.5

Öffnen Sie dann Ihr Terminal und führen Sie Folgendes aus:

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

3

Sie müssen den Pfad postgresql konfigurieren:

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

Danach müssen Sie die Anforderungen installieren:

pip3 install -r requirements

2

virtualenv ist für Python-Pakete. Ich glaube nicht, dass Sie Postgres in einer virtuellen Umgebung enthalten können. Die angezeigte Fehlermeldung ist vermutlich darauf zurückzuführen, dass Sie postgres noch nicht installiert haben. Das Installationsskript von psycopg2 sucht nach Postgres-Dateien (in diesem Fall pg_config) und findet sie nicht, da sie nicht installiert sind. postgres kann nicht mit pip oder virtualenv installiert werden.


1
Es ist möglich, postgresql in einer virtuellen Umgebung zu installieren. Oft ist dieser Fehler ein Pfadproblem, unabhängig davon, ob postgresql installiert wird.
l'L'l

1
@HolyMackerel, danke für die relevanteste Antwort. Gibt es Details dazu, warum Sie psycopg2 / pg nicht in virtualenv installieren können?
John Heights

1
postgres hat nichts mit python zu tun. Sie laufen getrennt, sprechen aber miteinander.
Bioto


1

Zusätzlich zu den Antworten von @bkev und @andi sollten Sie gemäß der Dokumentation auf Postgres.app Ihrem bash_profile auf dem Mac Folgendes hinzufügen:

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

Beachten Sie, dass es keine fest codierte Versionsnummer gibt. Ich wollte dies als Kommentar zu den obigen Antworten hinzufügen, aber ich habe nicht genug Repräsentanten dafür.


1

Wenn Sie postgresql 9.4 verwenden, befindet sich die Datei in

/usr/pgsql-9.4/bin/pg_config

Der Name des Pakets lautet

postgresql94-9.4.9-1PGDG.rhel6.x86_64

Gehen Sie wie folgt vor, um Ihrem PATH pg_config hinzuzufügen

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

1

Wenn Sie den psycopgTreiber nicht speziell verwenden müssen, wechseln Sie zum pg8000Treiber. Es ist reines Python und weniger pingelig.


0

Unter Ubuntu brauchte ich nur das Postgres-Entwicklungspaket:

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

0

Meins befand sich in /Library/PostgreSQL/9.4/bin

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.