Mac + virtualenv + pip + postgresql = त्रुटि: pg_config निष्पादन योग्य नहीं मिला


91

मैं एक ट्यूटोरियल के लिए पोस्टग्रेज स्थापित करने की कोशिश कर रहा था, लेकिन 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 का उपयोग कर रहा हूं क्योंकि मैं पोस्टग्रेज की सिस्टम-वाइड स्थापना नहीं चाहता हूं।


मैं केवल एक ही हूं, जिसने एक प्रासंगिक उत्तर प्रदान किया कि कैसे virtualenv का उपयोग करके इससे निपटने के लिए और काढ़ा आदि के साथ गायब नहीं होना है। देखें: stackoverflow.com/questions/20170895/…
andilabs

जवाबों:


104

मैक पर, यदि आप 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मानक टर्मिनल के बैश का उपयोग करने पर इस लाइन को जोड़ने की आवश्यकता होती है । यदि zshइस लाइन को .zshrcफाइल करने के लिए उपयोग किया जाता है। यह सब आपको अपने होम डायरेक्टरी में मिलेगा। (बस ls -la)
andilabs 22

2
यह काढ़ा का उपयोग करने की तुलना में लगभग एक लाख गुना आसान था।
नैट

अब यह संस्करण 9.5 है! वर्तमान संस्करण कहने के लिए उत्तर को संपादित करने पर विचार करें?
अज़ाहो

6
आप नवीनतम स्थापित Postgres संस्करण के लिए कौन से बिंदुओं के <current_version>साथ बदल सकते हैं latest। मेरा फ़ोल्डर जैसा दिखता है: ls /Applications/Postgres.app/Contents/Versions/और यह देता है9.5/ latest/
रेमंड

96

मैक पर, समाधान स्थापित करना है postgresql:

brew install postgresql

CentOS पर, समाधान स्थापित करना है postgresql-devel:

sudo yum install postgresql-devel

pg_configpostgresql-develपैकेज में है


11
प्रश्न "virtualenv" सेटअप के साथ आता है। मेरा मानना ​​है कि इस मामले में काढ़ा उपयुक्त नहीं है। ऐसा लगता है कि यह एक शुद्ध पाइप समाधान होना चाहिए।
जॉन हाईट

मानस सी लाइब्रेरी के लिए एक बंधन है, इसलिए आपको सी लाइब्रेरी स्थापित करना होगा। देशी C पुस्तकालयों को virtualenvs में स्थापित करना संभव नहीं है (AFAIK)।
पेंगुइन ब्रायन

एक बार जब आप पोस्टग्रैस्क्ल सी लाइब्रेरीज़ को स्थापित कर लेते हैं, तो आप असफल पाइप इंस्टॉल कमांड को फिर से चालू कर सकते हैं (यह उपरोक्त उत्तर से स्पष्ट नहीं किया गया था)।
पेंगुइन ब्रायन

33

मैं जॉन्स हाइट से पूरी तरह सहमत हूं कि पोस्ट किए गए अधिकांश उत्तर पूरी तरह से ऑफॉपिक हैं जो ओपी को वर्चुअन का उपयोग करने की बिल्कुल निर्दिष्ट आवश्यकता मानते हैं ।

मेरे लिए यह जवाब चल रहा है कि वर्चुअलनैव सक्रिय होने के बाद प्रॉम्प्ट पर कमांड चल रही है:

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


3
यह इस सवाल का सबसे अच्छा जवाब है।
विनोद शर्मा

3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"यदि आप Postgres के नवीनतम स्थापित संस्करण का उपयोग करना चाहते हैं
jaynp

19

आभासी वातावरण में अपना $ PATH चर मत भूलना! = अपने वैश्विक $ PATH चर। आप अपने virtualenv में और एक नए शेल में 'इको $ PATH' के साथ इसकी पुष्टि कर सकते हैं। इसलिए, जब तक आप PostgreSQL को अपने वर्चुअल वातावरण के अंदर एक अद्वितीय उदाहरण के रूप में स्थापित नहीं करना चाहते (न कि करने लायक चीज़, imo), आपको अपनी वैश्विक स्थापना के लिए पथ को शामिल करने के लिए virtualenv के भीतर $ PATH चर को संशोधित करना होगा। अपनी गुम pg_config त्रुटि को हल करें)।

यहाँ कदम हैं:

1.) एक नए शेल में, 'जो pg_config' टाइप करें। इससे रास्ता लौट आएगा। इसे कॉपी करें। मेरे मामले में, पथ इस तरह देखा गया: /Applications/Postgres.app/Contents/Versions/9.3.3/bin

2.) वापस अपने virtualenv खोल में, टाइप करें 'निर्यात PATH = / your-path-to-pg_config: $ PATH'

3.) फिर भी, virtualenv के भीतर, 'पाइप स्थापित psycopg2'

यदि सब कुछ योजना के अनुसार होता है, तो यह psycopg2 को वर्चुअल वातावरण में स्थापित करेगा, लेकिन इंस्टॉलेशन आपके ग्लोबल पोस्टगॉजिक SQL इंस्टॉलेशन को संदर्भित करेगा। मेरे मामले में, यह ग्लोबल इंस्टॉलेशन Postgres.App के माध्यम से स्थापित किया गया था, इसलिए पथ। मैं psycopg2 के साथ काम करने की इस पद्धति को पसंद करता हूं क्योंकि इसका मतलब है कि मैं डेटाबेस को केवल परिभाषित वर्चुअल वातावरण के बजाय किसी भी virtualenv के भीतर आसानी से उपयोग कर सकता हूं।

आशा है कि यह किसी को भी यहाँ आने में मदद करता है। Google जूस के लिए, यहाँ स्पष्ट (और अस्पष्ट) त्रुटि भाषा दी गई है जब आप इस समस्या को चलाते हैं:
कमांड python setup.py egg_info त्रुटि कोड के साथ विफल हुआ


2
फिर भी, मुझे लगता है कि प्रश्न का अर्थ है "virtualenv के अंदर एक अनूठा उदाहरण"। मैं अभी भी एक समाधान के लिए शिकार कर रहा हूं जो वर्चुअनव के भीतर स्थापित हो जाता है।
जॉन हाईट

आप असली विजेता हैं और मेरे दिन बच गए।
हाफिज सिद्दीक

10

यहाँ मैं अपने मैक (OSX 10.9) पर इस समस्या को हल करने में सक्षम था:

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

जब मुझे कोशिश की गई pip install psycopg(एक LLVM 5.1 अंक ) तो मुझे CLANG त्रुटि हुई , इसलिए मुझे इस आदेश के साथ मानस स्थापित करना पड़ा:

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

यह मिंग्यू के समाधान के समान है , लेकिन पर्याप्त अंतर हैं जो मुझे लगा कि यह साझा करने लायक था।


2
+1 ने मेरे लिए काम किया। विश्वास नहीं कर सकता कि मुझे MacOS पर एक पोस्टग्रेज + पाइथन डेवलपमेंट एनवायरनमेंट सेट करने के लिए C कंपाइलर को एक कस्टम फ्लैग निर्दिष्ट करना है ...
Andomar

1
प्रश्न "virtualenv" सेटअप के साथ आता है। मेरा मानना ​​है कि इस मामले में काढ़ा उपयुक्त नहीं है। ऐसा लगता है कि यह एक शुद्ध पाइप समाधान होना चाहिए।
जॉन हाईट

5

यह त्रुटि तब होती है जब बिल्ड टूल Postgresql पुस्तकालयों को नहीं पा सकते हैं।

अक्सर psycopg2 को यह निर्देश देना आवश्यक है कि आप pg_config बाइनरी को कैसे खोजें, आप कर सकते हैं:

  1. अपने शेल पथ में pg_config का पथ जोड़ें (/ usr / स्थानीय / pgsql / bin /)

  2. या psycopg2 स्रोत फ़ोल्डर में setup.cfg फ़ाइल को संपादित करें और pg_config = से शुरू होने वाली लाइन पर pg_config को पूरा पथ प्रदान करें =

pg_config = / usr / स्थानीय / pgSQL / bin / pg_config

  • ऊपर एक उदाहरण है, आप locate pg_configयह पता लगाने के लिए कर सकते हैं कि यह कहाँ रहता है, या बस टाइप करता है which pg_configऔर इसे आपको रास्ता बताना चाहिए।

कम अक्सर त्रुटि आपके सिस्टम पर स्थापित postgresql नहीं होने से आती है। यदि ऐसा है, तो डाउनलोड करें और पोस्टग्रेज का निर्माण करें, या ओएस एक्स के लिए एक पूर्व-निर्मित psycopg2 बाइनरी डाउनलोड करें।


1
ज़रूर ... लेकिन आप एक virtualenv के भीतर यह कैसे करते हैं, और सिस्टम की विस्तृत स्थापना पर निर्भर नहीं होना चाहिए?
जॉन हाईट

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


2

virtualenv अजगर पैकेज के लिए है। मुझे नहीं लगता कि आप एक virtualenv के अंदर पोस्टग्रेज को शामिल कर पाएंगे। त्रुटि संदेश जो आप देख रहे हैं वह संभवतः इसलिए है क्योंकि आपने अभी तक पोस्टग्रेज स्थापित नहीं किए हैं। Psycopg2 इंस्‍टॉल स्क्रिप्ट, पोस्टग्रेज फ़ाइलों (इस स्थिति में pg_config) की तलाश कर रही है और उन्‍हें नहीं ढूंढ रही है क्‍योंकि यह इंस्‍टॉल नहीं है। postgres को pip या virtualenv का उपयोग करके स्थापित नहीं किया जा सकता


1
एक virtualenv में postgresql को स्थापित करना संभव है और अक्सर यह त्रुटि एक पथ समस्या है, चाहे postgresql स्थापित हो।
l'L'l

1
@HolyMackerel, सबसे अधिक प्रासंगिक उत्तर के लिए धन्यवाद। आप virtualenv के भीतर psycopg2 / pg क्यों नहीं स्थापित कर सकते हैं, इस पर कोई विवरण देने के लिए?
जॉन हाईट

1
पोस्टग्रेट्स का अजगर से कोई लेना-देना नहीं है। वे अलग-अलग दौड़ते हैं लेकिन एक-दूसरे से बात करते हैं।
बायोटो


1

Postgres.app पर प्रलेखन के अनुसार, @bkev और @ कंडी द्वारा दिए गए उत्तरों के अलावा , आपको मैक पर अपने bash_profile के साथ निम्नलिखित जोड़ना चाहिए:

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

अपने PATH में pg_config जोड़ने के लिए, निम्न कार्य करें

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

1

यदि आपको psycopgड्राइवर का विशेष रूप से उपयोग करने की आवश्यकता नहीं है, तो ड्राइवर पर स्विच करें pg8000। यह शुद्ध पायथन और कम बारीक है।


0

पर उबंटू मैं सिर्फ जरूरत postgres देव पैकेज:

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

0

मेरा /Library/PostgreSQL/9.4/bin में स्थित था

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.