python Setup.py स्थापना के साथ--prefix त्रुटि के साथ--user संयोजन




installation distutils (3)

मैं पाइथन पैकेज को एक सिस्टम स्थापित करने की कोशिश कर रहा था जिसे मैंने हाल ही में एक्सेस प्राप्त किया था। मैं पाइथन की अपेक्षाकृत नई प्रति उपयोगकर्ता साइट-पैकेज निर्देशिका , और नया विकल्प --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 झंडे प्रदान नहीं कर रहा था। मैंने यह पता लगाने की कोशिश की कि समस्या क्या थी। मैं कुछ अन्य गरीब आत्मा को यक शेविंग के कुछ घंटों तक छोड़ने की उम्मीद में नीचे अपना उत्तर दस्तावेज करता हूं।


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

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

कोड:

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

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

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


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

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

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

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

एक बार कामकाज:

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

या

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

ध्यान दें कि = बाद कोई पाठ नहीं है (यहां तक ​​कि सफेद जगह भी नहीं)।

--user ध्वज मत भूलना।

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

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

[install]
prefix=

ध्यान दें कि = बाद कोई पाठ नहीं है (यहां तक ​​कि सफेद जगह भी नहीं)।

फिर जरूरी pip install --user या python setup.py install --user कमांड python setup.py install --user--user ध्वज मत भूलना।

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

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

यह ओपनएसयूएसई और रेडहाट दोनों के साथ एक मुद्दा प्रतीत होता है, जिसने इन प्लेटफार्मों पर वर्चुअलएन्व में एक बग का नेतृत्व किया है

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

[install]
prefix=/usr/local

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





distutils