सेटअप-इनस्टॉल के साथ --user - withfix त्रुटि के साथ गठबंधन करें


103

मैं पायथन संकुल को स्थापित करने की कोशिश कर रहा था जिसे मैंने हाल ही में प्राप्त किया है। मैं पायथन के अपेक्षाकृत नए प्रति उपयोगकर्ता साइट-संकुल निर्देशिका और नए विकल्प का लाभ उठाने की कोशिश कर रहा था --user। (विकल्प वर्तमान में अनिर्धारित है , हालांकि यह पायथन 2.6+ के लिए मौजूद है; आप दौड़कर मदद देख सकते हैं python setup.py install --help।)

जब मैंने दौड़ने की कोशिश की

python setup.py install --user

मेरे द्वारा डाउनलोड किए गए किसी भी पैकेज पर, मुझे हमेशा निम्न त्रुटि मिली:

error: can't combine user with with prefix/exec_prefix/home or install_(plat)base

त्रुटि अत्यंत क्योंकि हैरान था, जैसा कि आप देख सकते हैं, मैं नहीं दे रहा था --prefix, --exec-prefix, --install-base, या --install-platbaseकमांड लाइन विकल्प के रूप में झंडे। मैंने यह जानने में बहुत समय बर्बाद किया कि समस्या क्या थी। मैं नीचे दिए गए अपने उत्तर का दस्तावेजीकरण करता हूं, कुछ अन्य गरीब आत्मा को याक शेविंग के कुछ घंटों के लिए आशा करता हूं ।


2
मुझे वही त्रुटि मिली जो ./configure --prefix=${HOME}कि "उपयोगकर्ता = 1" में होने पर स्रोत से अजगर 3.6 स्थापित करने की कोशिश कर रहा था ~/.pydistutils.cfg। उस मामले में, मुझे "उपयोगकर्ता = 1" टिप्पणी करने की आवश्यकता है ताकि स्थापना प्रक्रिया पूरी हो सके।
bli

bli ने एक अच्छा संकेत दिया। मैं सोच रहा था कि कहां से --user विकल्प आ रहा है यहां तक ​​कि मैंने उस विकल्प का उपयोग नहीं किया। पाइप स्थापित - उपसर्ग / घर / myhomedir। मेरे पास ~ / .pydistutils.cfg फ़ाइल नहीं है, फिर भी जहां --user विकल्प सेट है, उसकी तलाश है।
केमिन झोउ

समस्या के स्रोत का पता लगाएं। यह डेबियन-विशिष्ट है। समस्या को दूर करने के लिए --system विकल्प को जोड़ने के बाद चला गया।
केमिन झोउ

जवाबों:


161

एक बार का हल:

pip install --user --install-option="--prefix=" <package_name>

या

python setup.py install --user --prefix=

ध्यान दें कि इसके बाद कोई टेक्स्ट (व्हाट्सएप भी नहीं) है =

करो नहीं भूलना --userझंडा।

कई पैकेज स्थापित करना:

~/.pydistutils.cfgनिम्न सामग्री के साथ (या अपने OS / प्लेटफ़ॉर्म के लिए) बनाएं :

[install]
prefix=

ध्यान दें कि इसके बाद कोई टेक्स्ट (व्हाट्सएप भी नहीं) है =

फिर आवश्यक pip install --userया python setup.py install --userकमांड चलाएं । करो नहीं भूलना --userझंडा।

अंत में, इस फ़ाइल को निकालें या नाम बदलें। इस फ़ाइल को छोड़ते समय पायथन संकुल को सिस्टम-वाइड (यानी, बिना --user) इस उपयोगकर्ता के रूप में स्थापित करते समय समस्याएँ आएंगी ~/.pydistutils.cfg

इस मुद्दे का कारण

यह OpenSUSE और RedHat दोनों के साथ एक मुद्दा प्रतीत होता है, जिससे इन प्लेटफार्मों पर virtualenv में एक बग हो गया है।

त्रुटि सिस्टम-स्तरीय डिस्टुटिल कॉन्फ़िगरेशन फ़ाइल (मेरे मामले में /usr/lib64/python2.6/distutils/distutils.cfg) से उपजी है जहां यह थी

[install]
prefix=/usr/local

असल में, यह हमेशा के रूप में स्थापित कमांड चलाने के बराबर है install --prefix=/usr/local। आपको ऊपर दिए गए तकनीकों में से एक का उपयोग करके इस विनिर्देश को ओवरराइड करना होगा।


1
आपका बहुत बहुत धन्यवाद। खाली उपसर्ग ने मेरी समस्या को निर्धारित किया: पाइप 1.1 ओपनएसयूएसई 11.4।
गुफ्तगू

6
आप सिस्टम-व्यापी
distutils.cfg

2
वाह! इसने मेरे लिए भी काम किया। पावरलाइन को स्थापित करने का प्रयास करते समय मुझे वही त्रुटि मिली। powerline.readthedocs.org/en/latest/installation/…
A-Dubb

4
दूसरे विचार पर, ऐसा करने से MAJOR की समस्या पैदा होगी। इस फ़ाइल को आसपास न रखें। अधिक जानकारी के लिए काढ़ा चिकित्सक को देखें (यह मानकर कि आप मैक ओएस एक्स पर होमब्रे का उपयोग कर रहे हैं)।
ए-डब

1
ध्यान दें कि इस फ़ाइल को इस तरह रखने से पायथन को लगता है कि / आपकी रूट पाइथन लाइब्रेरी डायरेक्टरी है, जिससे अगर आप अन्य नए पैकेजों को स्थापित करने का प्रयास करते हैं, तो भ्रमित करने वाले मुद्दे हो सकते हैं।
रोजगेल्डर

6

जैसा कि टिप्पणियों में नोट किया गया है, स्वीकृत उत्तर (@gotgenes द्वारा, जो, संभवतः, जीन हैं) अप्रत्याशित परिणाम ला सकते हैं।

@rogeleaderr का कहना है, "ध्यान दें कि इस फाइल को इस तरह रखने से पायथन को लगता है कि / आपकी रूट पायथन लाइब्रेरी डायरेक्टरी है, जिससे अगर आप अन्य नए पैकेजों को स्थापित करने की कोशिश करते हैं तो भ्रमित करने वाले मुद्दों को बढ़ावा मिलेगा।"

नई कॉन्फ़िगरेशन फ़ाइल लिखने के बजाय, जैसा कि @gotgenes अनुशंसा करते हैं, कमांड लाइन--prefix= पर एक विकल्प के रूप में जोड़ने के लिए एक बेहतर विकल्प (बराबर चिह्न के दाईं ओर कोई पाठ नहीं है) के रूप में है

$ python setup.py install --user --prefix=

5

दूसरों के समय को बचाने के लिए पोस्टिंग, क्योंकि मेरे लिए कोई भी उपलब्ध जवाब काम नहीं आया ...

कुछ वातावरणों में, --target( -t) स्विच का उपयोग करके अभी भी वही त्रुटि होगी। लिनक्स के दो स्वादों पर मेरे परीक्षण में, मुझे उसी मुद्दे का सामना करना पड़ा जब उपयोग किया गया था--prefix= पैरामीटर ।

कोड:

PYTHONUSERBASE=/tmp/ pip install --user --force-reinstall $PACKAGE

स्पष्टीकरण: मेरा वर्कअराउंड, जो कई वातावरणों (मैकओएस, अमेज़ॅन लिनक्स, डेबियन) पर काम करता है, PYTHONUSERBASEपर्यावरण चर को एक अस्थायी स्थान पर सेट करना है। --force-reinstallपैकेज स्थापित होने पर भी स्थानीय इंस्टॉलेशन को ट्रिगर करने के लिए उपयोग किया जाता है।

इसका परिणाम मॉड्यूल (ओएस और पायथन संस्करण के आधार पर) संकलित / स्थापित किया जाएगा: /tmp/lib/python2.7/site-packages/*


0

आप बस चला सकते हैं pip install --user ., कोई उपसर्ग की आवश्यकता नहीं है।

यह वैसे भी बेहतर है क्योंकि यह python3 के लिए डिफ़ॉल्ट होगा यदि आपका पाइप Python 3 का उपयोग करने के लिए कॉन्फ़िगर किया गया है (मैं प्रवेश करना भूल गया python3 setup.pyऔर उसने 2.7 के तहत 3-केवल पैकेज स्थापित किया)

(क्रेडिट https://stackoverflow.com/a/1550235/4364036 )


0

मेरी भी यही समस्या थी। यह अंदर छिपा हुआ था ~/.config/pip/pip.conf:

[global]
target=/foo/bar

इस तरह के एक कॉन्फिगरेशन को मेरी जानकारी के बिना थर्ड-पार्टी स्क्रिप्ट द्वारा बनाया गया था।

मेरा सुझाव है कि पाइप कॉन्फ़िगरेशन फ़ाइलों की जाँच करें और target=/foo/barविकल्पों को हटा दें ।

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