Mac + Virtualenv + pip + postgresql = ข้อผิดพลาด: ไม่พบ pg_config ปฏิบัติการ


92

ฉันพยายามติดตั้ง postgres สำหรับบทpipช่วยสอน แต่ทำให้ฉันมีข้อผิดพลาด:

pip install psycopg

ข้อผิดพลาดเล็กน้อยที่ฉันได้รับ:

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

อยู่ที่ไหนpg_configใน Virtualenv ของฉัน? จะกำหนดค่าได้อย่างไร? ฉันใช้ Virtualenv เพราะไม่ต้องการติดตั้ง postgres ทั้งระบบ


ฉันเป็นคนเดียวที่ให้คำตอบที่เกี่ยวข้องวิธีจัดการกับมันโดยใช้ Virtualenv และไม่พลาดการชงเป็นต้นดู: stackoverflow.com/questions/20170895/…
andilabs

คำตอบ:


107

บน Mac หากคุณใช้Postgres.appไฟล์ pg_config จะอยู่ใน/Applications/Postgres.app/Contents/Versions/<current_version>/binไดเรกทอรีของคุณ ที่จะต้องเพิ่มในเส้นทางระบบของคุณเพื่อแก้ไขข้อผิดพลาดเช่นนี้:

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

ตัวอย่างเช่นหากเวอร์ชัน Postgres.app ปัจจุบันคือ 9.5 บรรทัดการส่งออกนี้จะเป็น:

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

ด้วยเวอร์ชันล่าสุดของ Postgres.app (> 9.5?) คุณสามารถเพิ่ม "ล่าสุด" แทนหมายเลขเวอร์ชันได้ดังนี้:

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

5
โปรดสังเกตว่าเวอร์ชันจะเปลี่ยนไปตามเวลา ตอนนี้มัน9.4
andilabs

1
โปรดทราบว่าการที่จะนำไปใช้กับเชลล์ปัจจุบันเสมอจำเป็นต้องเพิ่มบรรทัดนี้.bash_profileหากใช้ bash ของ Terminal มาตรฐาน หากใช้zshต่อท้ายบรรทัดนี้ใน.zshrcไฟล์ ทั้งหมดนี้คุณจะพบในโฮมไดเร็กทอรีของคุณ (เพิ่งls -la)
andilabs

2
วิธีนี้ง่ายกว่าการชงเป็นล้านเท่า
เนท

ตอนนี้เป็นเวอร์ชัน 9.5! พิจารณาแก้ไขคำตอบเพื่อบอกว่าเวอร์ชันปัจจุบันหรือไม่
AZhao

6
คุณสามารถแทนที่<current_version>ด้วยlatestจุดใดเป็นเวอร์ชัน Postgres ที่ติดตั้งล่าสุด โฟลเดอร์ของฉันดูเหมือน: ls /Applications/Postgres.app/Contents/Versions/และให้9.5/ latest/
Raymond

96

บน Mac วิธีแก้ปัญหาคือการติดตั้งpostgresql:

brew install postgresql

บน CentOS วิธีแก้ปัญหาคือการติดตั้งpostgresql-devel:

sudo yum install postgresql-devel

pg_configอยู่ในpostgresql-develแพ็คเกจ


12
คำถามนำหน้าด้วยการตั้งค่า "Virtualenv" ฉันไม่เชื่อว่าการชงจะเหมาะสมในกรณีนี้ ดูเหมือนว่ามันควรจะเป็นโซลูชัน pip ที่บริสุทธิ์
john hight

Psycopg มีผลผูกพันกับไลบรารี C ดังนั้นคุณจะต้องติดตั้งไลบรารี C เป็นไปไม่ได้ (AFAIK) ที่จะติดตั้งไลบรารี C ดั้งเดิมลงใน Virtualenvs
Penguin Brian

เมื่อคุณติดตั้งไลบรารี postgresql C แล้วคุณสามารถรันคำสั่งการติดตั้ง pip ที่ล้มเหลวได้อีกครั้ง (คำตอบข้างต้นยังไม่ชัดเจน)
Penguin Brian

33

ฉันทั้งหมดเห็นด้วยกับจอห์นสูงว่าส่วนใหญ่ของคำตอบโพสต์มีทั้งหมด offtopic สมมติ OP จำเป็นที่จะต้องระบุว่าการใช้virtualenv

สำหรับฉันคำตอบคือเรียกใช้คำสั่งต่อไปนี้ในพรอมต์ในขณะที่เปิดใช้งาน Virtualenv:

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

(สังเกตว่าส่วนที่ 9.4 ย่อมาจากเวอร์ชันและอาจแตกต่างกันไป)

หรือหากคุณต้องการใช้Postgres เวอร์ชันล่าสุดที่ติดตั้ง:

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

แล้ว:

pip install psycopg2

สมมติว่าคุณติดตั้ง postgres เรียบร้อยแล้ว และถ้าไม่เช่นนั้นโปรดจำไว้ว่าวิธีแก้ปัญหาที่ดีที่สุดและขอแนะนำคือให้ใช้: Postgres.app


3
นี่คือคำตอบที่ดีที่สุดสำหรับคำถามนี้
Vinod Sharma

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"หากคุณต้องการใช้ Postgres เวอร์ชันที่ติดตั้งล่าสุด
jaynp

19

อย่าลืมว่าตัวแปร $ PATH ของคุณในสภาพแวดล้อมเสมือนจริง! = ตัวแปร $ PATH ส่วนกลางของคุณ คุณสามารถยืนยันได้ด้วย 'echo $ PATH' ใน Virtualenv ของคุณและในเชลล์ใหม่ ดังนั้นหากคุณไม่ต้องการติดตั้ง PostgreSQL เป็นอินสแตนซ์เฉพาะภายในสภาพแวดล้อมเสมือนของคุณ (ไม่ใช่สิ่งที่ควรทำ imo) คุณจะต้องแก้ไขตัวแปร $ PATH ภายใน Virtualenv เพื่อรวมพา ธ ไปยังการติดตั้งส่วนกลางของคุณ (ซึ่งจะ แก้ไขข้อผิดพลาด pg_config ที่หายไปของคุณ)

ขั้นตอนมีดังนี้

1. ) ในเชลล์ใหม่พิมพ์ 'ซึ่ง pg_config' สิ่งนี้จะคืนเส้นทาง คัดลอก ในกรณีของฉันเส้นทางมีลักษณะดังนี้: /Applications/Postgres.app/Contents/Versions/9.3/bin

2. ) กลับไปที่เชลล์ Virtualenv ของคุณพิมพ์ 'export PATH = / your-path-to-pg_config: $ PATH'

3. ) จากนั้นยังคงอยู่ใน Virtualenv 'pip install psycopg2'

หากทุกอย่างเป็นไปตามแผนสิ่งนี้จะติดตั้ง Psycopg2 ภายในสภาพแวดล้อมเสมือนจริง แต่การติดตั้งจะอ้างถึงการติดตั้ง Global PostgreSQL ของคุณ ในกรณีของฉันการติดตั้ง Global นี้ได้รับการติดตั้งผ่าน Postgres.App ดังนั้นเส้นทาง ฉันชอบวิธีการทำงานกับ psycopg2 นี้มากกว่าเพราะมันหมายความว่าฉันสามารถใช้ฐานข้อมูลได้อย่างง่ายดายภายใน Virtualenv ใด ๆ แทนที่จะใช้เฉพาะในสภาพแวดล้อมเสมือนที่กำหนด

หวังว่านี่จะช่วยทุกคนที่มาถึงที่นี่ สำหรับ Google juice นี่คือภาษาแสดงข้อผิดพลาดที่ชัดเจน (และคลุมเครือ) ที่ส่งคืนเมื่อคุณพบปัญหานี้:
คำสั่ง python setup.py egg_info ล้มเหลวด้วยรหัสข้อผิดพลาด 1


2
ถึงกระนั้นฉันคิดว่าคำถามมีความหมายถึง "อินสแตนซ์ที่ไม่ซ้ำใครภายใน" Virtualenv ฉันยังคงตามหาวิธีแก้ปัญหาที่ติดตั้ง pg ไว้ใน Virtualenv
john hight

คุณคือแชมป์ตัวจริงและช่วยชีวิตฉันไว้
Hafiz Siddiq

10

นี่คือวิธีที่ฉันสามารถแก้ปัญหานี้บน Mac ของฉัน (OSX 10.9):

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

ฉันได้รับข้อผิดพลาด CLANG เมื่อฉันลองpip install psycopg( ปัญหา LLVM 5.1 ) ดังนั้นฉันจึงต้องติดตั้ง Psycopg ด้วยคำสั่งนี้แทน:

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

คล้ายกับวิธีแก้ปัญหาของ Mingyuแต่มีความแตกต่างเพียงพอที่ฉันคิดว่ามันคุ้มค่าที่จะแบ่งปัน


2
+1 ทำงานให้ฉัน ไม่อยากจะเชื่อเลยว่าฉันต้องระบุแฟ
ล็กที่

1
คำถามนำหน้าด้วยการตั้งค่า "Virtualenv" ฉันไม่เชื่อว่าการชงจะเหมาะสมในกรณีนี้ ดูเหมือนว่ามันควรจะเป็นโซลูชัน pip ที่บริสุทธิ์
john hight

5

ข้อผิดพลาดนี้เกิดขึ้นเมื่อเครื่องมือสร้างไม่พบไลบรารี Postgresql

บ่อยครั้งที่จำเป็นต้องสั่งให้ psycopg2 หาไบนารี pg_config คุณสามารถ:

  1. เพิ่มพา ธ ไปยัง pg_config ในเชลล์พา ธ ของคุณ (/ usr / local / pgsql / bin /)

  2. หรือแก้ไขไฟล์ setup.cfg ในซอร์สโฟลเดอร์ psycopg2 และระบุพา ธ แบบเต็มไปยัง pg_config บนบรรทัดที่ขึ้นต้นด้วย pg_config =

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

  • ด้านบนเป็นตัวอย่างคุณสามารถlocate pg_configค้นหาว่ามันอยู่ที่ไหนหรือเพียงแค่พิมพ์which pg_configและควรบอกเส้นทางให้คุณทราบ

บ่อยครั้งที่ข้อผิดพลาดไม่ได้มาจากการไม่ได้ติดตั้ง postgresql ในระบบของคุณ ในกรณีนี้ให้ดาวน์โหลดและสร้าง postgres หรือดาวน์โหลดไบนารี Psycopg2 ที่สร้างไว้ล่วงหน้าสำหรับ OS X


1
แน่นอน ... แต่คุณจะทำสิ่งนี้ได้อย่างไรใน Virtualenv และไม่ต้องพึ่งพาการติดตั้ง pg ทั้งระบบ?
john hight

4

สำหรับOS X El Capitan (10.11.6)+ brew+ virtualenv+ PostgreSQL 9.5:

หลังจากติดตั้งPostgreSQL 9.5:

brew install postgresql@9.5

จากนั้นเปิดเทอร์มินัลของคุณและดำเนินการ:

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

4

คุณต้องกำหนดค่าเส้นทาง postgresql:

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

หลังจากนั้นคุณต้องติดตั้งข้อกำหนด:

pip3 install -r requirements

2

Virtualenv ใช้สำหรับแพ็คเกจ python ฉันไม่คิดว่าคุณจะสามารถบรรจุ postgres ไว้ใน Virtualenv ได้ ข้อความแสดงข้อผิดพลาดที่คุณเห็นน่าจะเป็นเพราะคุณยังไม่ได้ติดตั้ง postgres สคริปต์การติดตั้ง psycopg2 กำลังมองหาไฟล์ postgres (ในกรณีนี้คือ pg_config) และไม่พบเนื่องจากไม่ได้ติดตั้ง ไม่สามารถติดตั้ง postgres โดยใช้ pip หรือ Virtualenv


1
เป็นไปได้ที่จะติดตั้ง postgresql ใน Virtualenv และบ่อยครั้งที่ข้อผิดพลาดนี้เป็นปัญหาเส้นทางไม่ว่าจะติดตั้ง postgresql ก็ตาม
l'L'l

1
@HolyMackerel ขอบคุณสำหรับคำตอบที่ตรงประเด็นที่สุด รายละเอียดใด ๆ ที่จะนำเสนอเกี่ยวกับสาเหตุที่คุณไม่สามารถติดตั้ง psycopg2 / pg ภายใน Virtualenv ได้?
john hight

1
postgres ไม่มีส่วนเกี่ยวข้องกับ python พวกเขาวิ่งแยกกัน แต่คุยกัน
Bioto

2

บน Windows ผมติดตั้ง postgres ด้วยตนเองจากhttp://www.enterprisedb.com/products-services-training/pgdownload#windows หลังจากนั้นคำสั่งเดียวกันจะทำงาน


1

นอกเหนือจากคำตอบที่ @bkev และ @andi ตามเอกสารใน Postgres.app แล้วคุณควรเพิ่มสิ่งต่อไปนี้ใน bash_profile บน Mac:

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

โปรดทราบว่าไม่มีหมายเลขเวอร์ชันแบบฮาร์ดโค้ด ฉันต้องการเพิ่มสิ่งนี้เป็นความคิดเห็นสำหรับคำตอบด้านบน แต่ฉันมีตัวแทนไม่เพียงพอสำหรับสิ่งนี้


1

หากคุณใช้ postgresql 9.4 ไฟล์จะอยู่ใน

/usr/pgsql-9.4/bin/pg_config

ชื่อของแพ็กเกจคือ

postgresql94-9.4.9-1PGDG.rhel6.x86_64

ในการเพิ่ม pg_config ใน PATH ของคุณให้ทำดังต่อไปนี้

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

1

หากคุณไม่จำเป็นต้องใช้psycopgไดรเวอร์โดยเฉพาะให้เปลี่ยนไปใช้pg8000ไดรเวอร์ เป็น Python ที่บริสุทธิ์และจู้จี้จุกจิกน้อยกว่า



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.