Mac + virtualenv + pip + postgresql = Lỗi: không tìm thấy tệp thực thi pg_config


91

Tôi đã cố gắng cài đặt postgres để xem hướng dẫn, nhưng pipgặp lỗi:

pip install psycopg

Một đoạn lỗi tôi nhận được:

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

Trong pg_configvirtualenv của tôi ở đâu? Làm thế nào để cấu hình nó? Tôi đang sử dụng virtualenv vì tôi không muốn cài đặt postgres trên toàn hệ thống.


Tôi là người duy nhất, người đã cung cấp câu trả lời có liên quan về cách đối phó với nó bằng virtualenv và không bỏ sót bia, v.v. Xem: stackoverflow.com/questions/20170895/…
andilabs

Câu trả lời:


104

Trên Mac, nếu bạn đang sử dụng Postgres.app , tệp pg_config sẽ nằm trong /Applications/Postgres.app/Contents/Versions/<current_version>/binthư mục của bạn . Điều đó sẽ cần được thêm vào đường dẫn hệ thống của bạn để khắc phục lỗi này, như sau:

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

Vì vậy, ví dụ: nếu phiên bản Postgres.app hiện tại là 9.5, dòng xuất này sẽ là:

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

Với các phiên bản gần đây hơn của Postgres.app (> 9.5?), Bạn có thể chỉ cần thêm "mới nhất" thay cho số phiên bản, như sau:

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

5
thông báo rằng phiên bản sẽ thay đổi trong thời gian; bây giờ nó của nó9.4
andilabs

1
lưu ý rằng để nó luôn được áp dụng cho shell hiện tại, yêu cầu thêm dòng này vào .bash_profilenếu sử dụng bash chuẩn của Terminal. NẾU sử dụng zshnối dòng này vào .zshrctệp. Tất cả điều này bạn sẽ tìm thấy trong thư mục chính của bạn. (just ls -la)
andilabs

2
Điều này dễ dàng hơn khoảng một triệu lần so với việc sử dụng bia.
Nate

bây giờ nó là phiên bản 9.5! xem xét chỉnh sửa câu trả lời để nói phiên bản hiện tại?
AZhao

6
bạn có thể thay thế <current_version>bằng latestđiểm nào đến phiên bản Postgres được cài đặt mới nhất. Thư mục của tôi trông giống như: ls /Applications/Postgres.app/Contents/Versions/và nó mang lại9.5/ latest/
Raymond

96

Trên Mac, giải pháp là cài đặt postgresql :

brew install postgresql

Trên CentOS, giải pháp là cài đặt postgresql-devel :

sudo yum install postgresql-devel

pg_configlà trong postgresql-develgói


12
Câu hỏi bắt đầu bằng thiết lập "virtualenv". Tôi không tin rằng bia là thích hợp trong trường hợp này. Có vẻ như nó phải là một giải pháp pip tinh khiết.
john hight

psycopg là một ràng buộc với thư viện C, vì vậy bạn sẽ phải cài đặt thư viện C. Không thể (AFAIK) cài đặt các thư viện C gốc vào các virtualenv.
Penguin Brian

Khi bạn đã cài đặt các thư viện postgresql C, sau đó bạn có thể chạy lại lệnh cài đặt pip bị lỗi (điều này không được làm rõ trong câu trả lời ở trên).
Penguin Brian,

33

Tôi hoàn toàn đồng ý với john hight rằng hầu hết các câu trả lời đã đăng hoàn toàn không phù hợp với giả định OP được chỉ định chính xác nhu cầu sử dụng virtualenv .

Đối với tôi, câu trả lời là chạy lệnh sau trong dấu nhắc khi đã kích hoạt virtualenv:

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

(lưu ý rằng phần 9.4 là viết tắt của phiên bản và có thể thay đổi)

hoặc nếu bạn muốn sử dụng phiên bản Postgres được cài đặt mới nhất :

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

và sau đó:

pip install psycopg2

thành công nếu giả sử bạn đã cài đặt postgres. Và nếu không, thì hãy nhớ rằng giải pháp tốt nhất và được khuyến khích là sử dụng: Postgres.app


3
Đây là câu trả lời tốt nhất cho câu hỏi này.
Vinod Sharma

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"nếu bạn muốn sử dụng các phiên bản cài đặt mới nhất của Postgres
jaynp

19

Đừng quên rằng biến $ PATH của bạn trong môi trường ảo! = Biến $ PATH toàn cục của bạn. Bạn có thể xác nhận điều này bằng 'echo $ PATH' trong virtualenv của mình và cả trong một shell mới. Vì vậy, trừ khi bạn muốn cài đặt PostgreSQL như một phiên bản duy nhất bên trong môi trường ảo của mình (không phải là điều đáng làm, imo), bạn sẽ cần phải sửa đổi biến $ PATH trong virtualenv để bao gồm đường dẫn đến cài đặt chung của bạn (điều này sẽ giải quyết lỗi pg_config bị thiếu của bạn).

Đây là các bước:

1.) Trong một trình bao mới, nhập 'which pg_config'. Điều này sẽ trả lại đường dẫn. Sao chép nó. Trong trường hợp của tôi, đường dẫn trông như thế này: /Application/Postgres.app/Contents/Versions/9.3/bin

2.) Quay lại trình bao virtualenv của bạn, nhập 'export PATH = / your-path-to-pg_config: $ PATH'

3.) Sau đó, vẫn trong virtualenv, 'pip install psycopg2'

Nếu tất cả diễn ra theo đúng kế hoạch, điều này sẽ cài đặt psycopg2 trong môi trường ảo, nhưng cài đặt sẽ tham chiếu đến cài đặt Global PostgreSQL của bạn. Trong trường hợp của tôi, cài đặt Toàn cầu này đã được cài đặt qua Postgres.App, do đó là đường dẫn. Tôi thích phương pháp này làm việc với psycopg2 vì nó có nghĩa là tôi có thể sử dụng cơ sở dữ liệu dễ dàng trong bất kỳ virtualenv nào hơn là chỉ trong môi trường ảo đã xác định.

Hy vọng điều này sẽ giúp bất cứ ai đến đây. Đối với Google juice, đây là ngôn ngữ lỗi rõ ràng (và mơ hồ) được trả lại khi bạn gặp sự cố này:
Lệnh python setup.py egg_info không thành công với mã lỗi 1


2
Tuy nhiên, tôi nghĩ rằng câu hỏi ngụ ý một virtualenv "trường hợp duy nhất bên trong". Tôi vẫn đang tìm kiếm một giải pháp được cài đặt pg trong virtualenv.
john hight

Bạn là nhà vô địch thực sự và đã cứu ngày của tôi.
Hafiz Siddiq

10

Đây là cách tôi có thể giải quyết vấn đề này trên máy Mac của mình (OSX 10.9):

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

Tôi gặp lỗi CLANG khi thử pip install psycopg(sự cố LLVM 5.1 ), vì vậy tôi phải cài đặt psycopg bằng lệnh này thay thế:

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

Nó tương tự như giải pháp của Mingyu , nhưng có đủ điểm khác biệt mà tôi nghĩ nó đáng được chia sẻ.


2
+1 Làm việc cho tôi. Không thể tin rằng tôi phải chỉ định một lá cờ tùy chỉnh cho một trình biên dịch C để thiết lập một môi trường postgres + phát triển python trên hệ điều hành MacOS ...
Andomar

1
Câu hỏi bắt đầu bằng thiết lập "virtualenv". Tôi không tin rằng bia là thích hợp trong trường hợp này. Có vẻ như nó phải là một giải pháp pip tinh khiết.
john hight

5

Lỗi này xảy ra khi các công cụ xây dựng không thể tìm thấy thư viện Postgresql.

Thường thì cần phải hướng dẫn psycopg2 cách tìm tệp nhị phân pg_config, bạn có thể:

  1. thêm đường dẫn đến pg_config trong đường dẫn shell của bạn (/ usr / local / pgsql / bin /)

  2. hoặc chỉnh sửa tệp setup.cfg trong thư mục nguồn psycopg2 và cung cấp đường dẫn đầy đủ đến pg_config trên dòng bắt đầu bằng pg_config =

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

  • ở trên là một ví dụ, bạn có thể làm locate pg_configđể tìm ra vị trí của nó hoặc chỉ cần nhập which pg_configvà nó sẽ cho bạn biết đường dẫn.

Ít thường xảy ra lỗi do không cài đặt postgresql trên hệ thống của bạn. Nếu vậy, hãy tải xuống và tạo postgres hoặc tải xuống tệp nhị phân psycopg2 được tạo sẵn cho OS X.


1
Chắc chắn rồi ... nhưng làm cách nào để bạn thực hiện việc này trong virtualenv và không phải phụ thuộc vào cài đặt pg trên toàn hệ thống?
john hight

4

Đối với OS X El Capitan (10.11.6)+ brew+ virtualenv+ PostgreSQL 9.5:

Sau khi cài đặt PostgreSQL 9.5:

brew install postgresql@9.5

Sau đó, mở thiết bị đầu cuối của bạn và thực hiện:

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

3

bạn phải định cấu hình đường dẫn postgresql:

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

sau đó, bạn phải cài đặt các yêu cầu:

pip3 install -r requirements

2

virtualenv dành cho các gói python. Tôi không nghĩ rằng bạn sẽ có thể chứa postgres bên trong virtualenv. Thông báo lỗi mà bạn thấy có thể là do bạn chưa cài đặt postgres. Tập lệnh cài đặt psycopg2 đang tìm kiếm các tệp postgres (trong trường hợp này là pg_config) và không tìm thấy chúng vì nó chưa được cài đặt. Không thể cài đặt postgres bằng pip hoặc virtualenv.


1
có thể cài đặt postgresql trong virtualenv và thường lỗi này là sự cố đường dẫn, bất kể postgresql được cài đặt.
Tôi sẽ là

1
@HolyMackerel, cảm ơn vì câu trả lời phù hợp nhất. Bất kỳ chi tiết nào để cung cấp về lý do tại sao bạn không thể cài đặt psycopg2 / pg trong virtualenv?
john hight

1
postgres không liên quan gì đến python. Họ chạy riêng nhưng nói chuyện với nhau.
Bioto


1

Ngoài các câu trả lời do @bkev và @andi cung cấp, theo tài liệu trên Postgres.app, bạn nên thêm phần sau vào bash_profile của mình trên Mac:

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

Lưu ý rằng, không có số phiên bản được mã hóa cứng. Tôi muốn thêm điều này làm bình luận cho các câu trả lời ở trên, nhưng tôi không có đủ đại diện cho điều này.


1

Nếu bạn đang sử dụng postgresql 9.4, tệp này nằm ở

/usr/pgsql-9.4/bin/pg_config

Tên của gói là

postgresql94-9.4.9-1PGDG.rhel6.x86_64

để thêm pg_config vào PATH của bạn, hãy làm như sau

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

1

Nếu bạn không phải sử dụng psycopgtrình điều khiển cụ thể, hãy chuyển sang pg8000trình điều khiển. Đó là Python thuần túy và ít cầu kỳ hơn.


0

Trên Ubuntu, tôi chỉ cần gói postgres dev:

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

0

Của tôi nằm trong /Library/PostgreSQL/9.4/bin

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.