Mac + virtualenv + pip + postgresql = Kesalahan: pg_config dapat dieksekusi tidak ditemukan

92

Saya mencoba menginstal postgres untuk tutorial, tetapi pipmemberi saya kesalahan:

pip install psycopg

Sedikit kesalahan yang saya dapatkan:

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

Di mana pg_configdi virtualenv saya? Bagaimana cara mengkonfigurasinya? Saya menggunakan virtualenv karena saya tidak ingin instalasi postgres di seluruh sistem.

KGo
sumber
Saya satu-satunya, yang memberikan jawaban yang relevan bagaimana mengatasinya menggunakan virtualenv dan tidak ketinggalan dengan minuman dll. Lihat: stackoverflow.com/questions/20170895/…
andilabs

Jawaban:

106

Di Mac, jika Anda menggunakan Postgres.app , file pg_config ada di /Applications/Postgres.app/Contents/Versions/<current_version>/bindirektori Anda . Itu perlu ditambahkan ke jalur sistem Anda untuk memperbaiki kesalahan ini, seperti ini:

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

Jadi misalnya, jika versi Postgres.app saat ini adalah 9.5, baris ekspor ini akan menjadi:

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

Dengan versi Postgres.app yang lebih baru (> 9.5?), Anda cukup menambahkan "terbaru" sebagai pengganti nomor versi, seperti:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
bkev
sumber
5
perhatikan bahwa versi akan berubah seiring waktu; sekarang itu9.4
andilabs
1
ketahuilah bahwa untuk menerapkannya selalu ke shell saat ini, diperlukan penambahan baris ini .bash_profilejika menggunakan bash Terminal standar. JIKA menggunakan zshtambahkan baris ini ke .zshrcfile. Semua ini akan Anda temukan di direktori home Anda. (hanya ls -la)
andilabs
2
Ini sekitar satu juta kali lebih mudah daripada menggunakan minuman keras.
Nate
sekarang sudah versi 9.5! pertimbangkan untuk mengedit jawaban untuk mengatakan versi saat ini?
AZhao
6
Anda dapat mengganti <current_version>dengan latestpoin mana ke versi Postgres terbaru yang diinstal. Folder saya terlihat seperti: ls /Applications/Postgres.app/Contents/Versions/dan memberi9.5/ latest/
Raymond
96

Di Mac, solusinya adalah menginstal postgresql:

brew install postgresql

Di CentOS, solusinya adalah menginstal postgresql-devel:

sudo yum install postgresql-devel

pg_configada dalam postgresql-develpaket

Mingyu
sumber
12
Pertanyaannya diawali dengan penyiapan "virtualenv". Saya tidak percaya minuman tepat dalam kasus ini. Sepertinya itu harus menjadi solusi pip murni.
john hight
psycopg adalah pengikatan ke pustaka C, jadi Anda harus menginstal pustaka C. Tidak dimungkinkan (AFAIK) untuk menginstal library C asli ke dalam virtualenv.
Penguin Brian
Setelah Anda menginstal pustaka C postgresql, Anda dapat menjalankan kembali perintah instalasi pip yang gagal (ini tidak dijelaskan oleh jawaban di atas).
Penguin Brian
33

Saya sangat setuju dengan john hight bahwa sebagian besar jawaban yang diposting benar-benar offtopic dengan asumsi OP benar-benar membutuhkan penggunaan virtualenv .

Bagi saya jawabannya adalah menjalankan perintah berikut pada prompt sambil mengaktifkan virtualenv:

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

(perhatikan bahwa bagian 9.4 adalah singkatan dari versi dan dapat bervariasi)

atau jika Anda ingin menggunakan Postgres versi terbaru :

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

lalu:

pip install psycopg2

berjalan dengan sukses dengan asumsi Anda telah menginstal postgres. Dan jika tidak, maka ingatlah bahwa solusi terbaik dan yang direkomendasikan adalah menggunakan: Postgres.app

andilabs
sumber
3
Ini adalah jawaban terbaik untuk pertanyaan ini.
Vinod Sharma
3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"jika Anda ingin menggunakan versi terinstal terbaru dari Postgres
jaynp
19

Jangan lupa bahwa variabel $ PATH Anda di lingkungan virtual! = Variabel $ PATH global Anda. Anda dapat mengonfirmasi ini dengan 'echo $ PATH' di virtualenv Anda dan juga di shell baru. Jadi, kecuali Anda ingin menginstal PostgreSQL sebagai contoh unik di dalam lingkungan virtual Anda (bukan hal yang layak dilakukan, imo), Anda harus memodifikasi variabel $ PATH di dalam virtualenv untuk memasukkan jalur ke instalasi global Anda (yang akan memecahkan kesalahan pg_config Anda yang hilang).

Berikut langkah-langkahnya:

1.) Di shell baru, ketik 'which pg_config'. Ini akan mengembalikan jalan. Salin. Dalam kasus saya, jalurnya terlihat seperti ini: /Applications/Postgres.app/Contents/Versions/9.3/bin

2.) Kembali ke shell virtualenv Anda, ketik 'export PATH = / your-path-to-pg_config: $ PATH'

3.) Kemudian, masih dalam virtualenv, 'pip install psycopg2'

Jika semua berjalan sesuai rencana, ini akan menginstal psycopg2 dalam lingkungan virtual, tetapi penginstalan akan merujuk ke penginstalan Global PostgreSQL Anda. Dalam kasus saya, instalasi Global ini diinstal melalui Postgres.App, karenanya jalurnya. Saya lebih suka metode ini bekerja dengan psycopg2 karena itu berarti saya dapat menggunakan database dengan mudah dalam virtualenv apa pun daripada hanya dalam lingkungan virtual yang ditentukan.

Semoga ini bisa membantu siapa saja yang datang ke sini. Untuk Google Juice, berikut ini bahasa kesalahan eksplisit (dan tidak jelas) yang dikembalikan ketika Anda mengalami masalah ini:
Perintah python setup.py egg_info gagal dengan kode kesalahan 1

Kevin Dalias
sumber
2
Namun, saya pikir pertanyaannya menyiratkan "contoh unik di dalam" virtualenv. Saya masih mencari solusi yang terinstal pg di dalam virtualenv.
john hight
Anda adalah juara sejati dan menyelamatkan hari saya.
Hafiz Siddiq
10

Inilah cara saya dapat menyelesaikan masalah ini di Mac saya (OSX 10.9):

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

Saya mendapat kesalahan CLANG ketika saya mencoba pip install psycopg(masalah LLVM 5.1 ), jadi saya harus menginstal psycopg dengan perintah ini sebagai gantinya:

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

Ini mirip dengan solusi Mingyu , tetapi ada cukup banyak perbedaan yang menurut saya layak untuk dibagikan.

mrgnw.dll
sumber
2
+1 Bekerja untuk saya. Tidak percaya saya harus menentukan bendera khusus ke kompiler C untuk mengatur lingkungan pengembangan postgres + python di MacOS ...
Andomar
1
Pertanyaannya diawali dengan penyiapan "virtualenv". Saya tidak percaya minuman tepat dalam kasus ini. Sepertinya itu harus menjadi solusi pip murni.
john hight
5

Kesalahan ini terjadi ketika alat pembangunan tidak dapat menemukan perpustakaan Postgresql.

Seringkali diperlukan untuk menginstruksikan psycopg2 bagaimana menemukan biner pg_config, Anda dapat:

  1. tambahkan jalur ke pg_config di jalur shell Anda (/ usr / local / pgsql / bin /)

  2. atau edit file setup.cfg di folder sumber psycopg2 dan berikan path lengkap ke pg_config pada baris yang dimulai dengan pg_config =

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

  • di atas adalah contoh, yang dapat Anda lakukan locate pg_configuntuk mencari tahu di mana ia berada, atau cukup ketik which pg_configdan itu akan memberi tahu Anda jalurnya.

Lebih jarang kesalahan datang karena tidak menginstal postgresql di sistem Anda. Jika demikian, unduh dan buat postgres, atau unduh biner psycopg2 pra-bangun untuk OS X.

l'L'l
sumber
1
Tentu ... tapi bagaimana Anda melakukan ini dalam virtualenv, dan tidak bergantung pada instalasi pg di seluruh sistem?
john hight
4

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

Setelah menginstal PostgreSQL 9.5:

brew install postgresql@9.5

Kemudian, buka terminal Anda dan jalankan:

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

Anda harus mengonfigurasi jalur postgresql:

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

setelah itu, Anda harus memasang persyaratan:

pip3 install -r requirements
Diego Santa Cruz Mendezú
sumber
2

virtualenv adalah untuk paket python. Saya tidak berpikir Anda akan dapat memuat postgres di dalam virtualenv. Pesan kesalahan yang Anda lihat mungkin karena Anda belum menginstal postgres. Skrip instalasi psycopg2 sedang mencari file postgres (dalam hal ini pg_config) dan tidak menemukannya karena tidak diinstal. postgres tidak dapat diinstal menggunakan pip atau virtualenv.

Makarel Suci
sumber
1
mungkin untuk menginstal postgresql di virtualenv dan seringkali kesalahan ini adalah masalah jalur, terlepas dari postgresql yang diinstal.
l'L'l
1
@HolyMackerel, terima kasih atas jawaban yang paling relevan. Adakah detail yang ditawarkan tentang mengapa Anda tidak dapat menginstal psycopg2 / pg dalam virtualenv?
john hight
1
postgres tidak ada hubungannya dengan python. Mereka lari secara terpisah tetapi saling berbicara.
Bioto
1

Selain jawaban yang diberikan oleh @bkev dan @andi, menurut dokumentasi di Postgres.app, Anda harus menambahkan yang berikut ini ke bash_profile Anda di Mac:

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

Perhatikan bahwa, tidak ada nomor versi hard-code. Saya ingin menambahkan ini sebagai komentar untuk jawaban di atas, tetapi saya tidak memiliki cukup perwakilan untuk ini.

Turgut Sarıçam
sumber
1

Jika Anda menggunakan postgresql 9.4, file tersebut terletak di

/usr/pgsql-9.4/bin/pg_config

Nama paketnya adalah

postgresql94-9.4.9-1PGDG.rhel6.x86_64

untuk menambahkan pg_config ke PATH Anda, lakukan hal berikut

PATH=$PATH:/usr/pgsql-9.4/bin/
Ahmed
sumber
1

Jika Anda tidak harus menggunakan psycopgdriver secara khusus, beralihlah ke pg8000driver. Ini murni Python dan tidak terlalu rewel.

Chris Johnson
sumber
0

Di Ubuntu saya hanya membutuhkan paket postgres dev:

sudo apt-get install postgresql-server-dev-all
marcanuy.dll
sumber
0

Milik saya terletak di /Library/PostgreSQL/9.4/bin

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
InternetFett
sumber