2012-05-21 9 views
18

मैं कुछ संकुल को किसी तृतीय-पक्ष site-packages निर्देशिका (मानक सिस्टम स्थानों से परे) में स्थापित करना चाहता हूं। क्या इसे स्थापित करने का कोई तरीका है कि उसमें .pth फ़ाइलों का सम्मान किया जाता है?एक द्वितीयक साइट-पैकेज निर्देशिका (और उसमें .pth फ़ाइलों से संकुल लोड करना)


पृष्ठभूमि: मैं ओएस एक्स, वर्चुअलनेव और होमब्रू का उपयोग कर रहा हूं। कुछ पैकेज हैं (विशेष रूप से मेरे मामले में wxPython) जो वर्चुअलenv में पाइप के माध्यम से अच्छी तरह से स्थापित नहीं करते हैं। इन मामलों में, होमब्री पैकेज हैं जो उनके स्थान पर काम करते हैं। होमब्रू /usr/local/lib/python2.7 में एक तीसरी साइट-पैकेज फ़ोल्डर बनाता है। मैं बस इस फ़ोल्डर को इंगित करना चाहता हूं और brew के नियंत्रण में सभी वस्तुओं का रख-रखाव छोड़ना चाहता हूं। ऐसा लगता है कि, यह संभव नहीं है।

  • $PYTHONPATH के माध्यम से पथ में शामिल करना .pth फ़ाइलों को लोड नहीं करता है। (Should Python 2.6 on OS X deal with multiple easy-install.pth files in $PYTHONPATH?)
  • पायथन ने .pth फ़ाइलों के घोंसले या पुनरावर्ती उपयोग की अनुमति नहीं दी है। (Nested .pth Files or Loading Extra site-dirs from a Network)
  • वर्चुअलनेव add2virtualenv के लिए रैपर .pth फ़ाइल में कुछ अतिरिक्त स्मारक जोड़ता है, बस निर्देशिका सूचीबद्ध होने से परे, लेकिन मेरा मानना ​​है कि यह केवल पथ सूची को पीछे रखता है।

मैं निश्चित रूप से इस मुद्दे में रुचि रखने वाला अकेला नहीं हूं। मैं जेनेरिक 'पीएचटी फाइलों पर काम नहीं कर रहा हूं' प्रश्नों और पदों की एक अच्छी संख्या को दांव दूंगा जो मैंने इस मुद्दे से संबंधित हैं। क्या कोई अच्छा समाधान है?

उत्तर

17

site मॉड्यूल पर एक नज़र डालें। यह फ़ंक्शन addsitedir प्रदान करता है जो आपको चाहिए जो करना चाहिए।

इस का उपयोग करने के sitecustomize.py या usercustomize.py नाम की एक फ़ाइल बना सकते हैं और एक मौजूदा PYTHONPATH निर्देशिका (या किसी भी निर्देशिका कि sys.path पर समाप्त होता है) के बाद सामग्री के साथ में रखें होगा सबसे आसान तरीका:

import site 
site.addsitedir('/usr/local/lib/python2.7') 

जब पाइथन शुरू हो रहा है तो sitecustomize आयात करने के लिए और फिर usercustomize आयात करने के लिए प्रयास किया जाता है, यही कारण है कि यह काम करता है। साइट प्रलेखन से:

इन पथ जोड़तोड़ के बाद, एक प्रयास sitecustomize नाम के एक मॉड्यूल है, जो मनमाने ढंग से साइट विशिष्ट अनुकूलन प्रदर्शन कर सकते हैं आयात करने के लिए किया जाता है। यह आमतौर पर साइट-पैकेज निर्देशिका में सिस्टम व्यवस्थापक द्वारा बनाया जाता है। यदि यह आयात ImportError अपवाद के साथ विफल रहता है, तो इसे चुपचाप अनदेखा किया जाता है।

इसके बाद, usercustomize नामक मॉड्यूल को आयात करने का प्रयास किया जाता है, जो ENABLE_USER_SITE सत्य होने पर मनमाने ढंग से उपयोगकर्ता-विशिष्ट अनुकूलन निष्पादित कर सकता है। यह फ़ाइल उपयोगकर्ता साइट-पैकेज निर्देशिका (नीचे देखें) में बनाई गई है, जो sys.path का हिस्सा है जब तक कि -s द्वारा अक्षम नहीं किया जाता है। एक ImportError चुपचाप अनदेखा किया जाएगा।

+0

sitecustomize.py करो .pth फ़ाइलें रख या स्वचालित रूप से स्टार्टअप पर चलने मिल usercustomize.py कर सकते हैं? संपादित करें: [हाँ, हाँ वे करते हैं] (http://docs.python.org/library/site.html)। धन्यवाद! –

+0

@MattB। हां, कुछ अतिरिक्त जानकारी के साथ मेरा जवाब संपादित किया। दस्तावेज साइट मॉड्यूल पेज के शीर्ष से आता है जिसे मैंने अपने उत्तर में जोड़ा था। –

+1

मैं अभी भी पूरी तरह से समझ नहीं पा रहा हूं कि साइट कैसे काम करती है, लेकिन: (1) इसे additedir ('/ usr/local'), यानी वैकल्पिक उपसर्ग (लेकिन यह मेरे लिए काम नहीं करता) द्वारा नहीं होना चाहिए, या (2) additedir ('/ usr/local/lib/python2.7/site-packages') जोड़ने के लिए पथ, और उस दूसरे मामले में, इसे सिर्फ PythonPATH में क्यों नहीं जोड़ना? –

1

विशेष रूप से स्थिति है जहाँ उपयोगकर्ता सिस्टम-वाइड site-packages करने के लिए कोई व्यवस्थापकीय एक्सेस है से निपटने के लिए प्रति-उपयोगकर्ता site-packages निर्देशिका के निर्माण को संबोधित कर रहे, PEP 370 हुई थी।

उदाहरण के लिए यूनिक्स (मैक ओएस सहित) पर, और यह मानते हुए कि कोई पाइथन 3 का उपयोग कर रहा है।6, एक निम्न निर्देशिका बना सकते हैं और अंदर वहाँ

~/.local/lib/python3.6/site-packages

संबंधित मुद्दे