विश्व स्तर पर डिफ़ॉल्ट PYTHONPATH (sys.path) को कैसे संशोधित किया जाए?


33

उबंटू (10.10) सिस्टम पर, मेरे पास एक पायथन पैकेज है जो खुद को स्थापित करता है /usr/local/lib/python2.6/site-packages/। यह डिफ़ॉल्ट पथ (sys.path) में सम्‍मिलित नहीं है। मैं इस निर्देशिका को पथ से कैसे जोड़ूं?

$PYTHONPATHपर्यावरण चर सेट करना , निश्चित रूप से एक समाधान है, लेकिन मैं इसे करने के लिए अधिक सुरुचिपूर्ण तरीके की तलाश कर रहा हूं। उदाहरण के लिए easy_installइसमें स्थापित पैकेज भी डाले, मेरा sys.path कुछ इस तरह दिखता है:

['', '/usr/local/lib/python2.6/dist-packages/keyring-0.5.1-py2.6.egg', 
'/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk',  
'/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', 
'/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', 
'/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/pymodules/python2.6', 
'/usr/lib/pymodules/python2.6/gtk-2.0']

इसलिए पथ स्पष्ट रूप से पायथन बाइनरी में निर्मित डिफ़ॉल्ट नहीं है।

क्या कोई एकल फ़ाइल है जिसमें ऊपर प्रविष्टियाँ हैं? या किन तरीकों से इसे संशोधित करना संभव है?

जवाबों:


27

साइट मॉड्यूल प्रलेखन और संशोधित अजगर की खोज पथ आप जो खोज रहे हैं होने लगते हैं।

जहां तक ​​मैं इसे समझता हूं, उन प्रविष्टियों को इसमें जोड़ा जा रहा sys.pathहै:

  • /usr/lib/python2.6/site.py
  • /usr/lib/python2.6/dist-packages/site.py
    (पायथन के अपने संस्करण में 2.6 बदलें।)

इसे बदलने के लिए सबसे आसान तरीका है एक फ़ाइल जोड़ने के लिए है /usr/local/lib/python2.6/dist-packages/site-packages.pthयुक्त ../site-packages

वैकल्पिक रूप से, शायद आप पैकेज का उपयोग करना सिखा सकते हैं site.getsitepackages()?


1
धन्यवाद, पूरी तरह से काम करता है :) (मैंने / .rr/local/python2.6/dist-packages में एक .pth फ़ाइल जोड़कर समाप्त कर दिया, जिसमें "../site-packages" शामिल है)
Latanius

1
तुम भी एक मॉड्यूल कहा जाता है बना सकते हैं sitecustomize.pyजो site.pyआयात करने की कोशिश करता है और संशोधित sys.pathवहाँ।
TestUser16418

5

आप /etc/profile.d/local_python.shसामग्री के साथ एक नई फ़ाइल बना सकते हैं

PYTHONPATH="/usr/local/lib/python2.6/site-packages/":"${PYTHONPATH}"
export PYTHONPATH

जो PYTHONPATHआपके सिस्टम पर सभी लॉग इन यूजर्स के लिए वैरिएबल सेट करेगा ।


7
यह वास्तव में सार्वभौमिक नहीं है। /Etc/profile.d तंत्र केवल गोले वाले लोगों के लिए लॉगिन गोले के लिए काम करेगा जो /etc/profile.d (bash / ksh / zsh) का उपयोग करते हैं। मुझे यकीन है कि csh उपयोगकर्ता इस परिवर्तन को नहीं देखेंगे। इसके अलावा, क्रॉन / नौकरियों में नजरअंदाज कर दिया जाएगा।
रिच होमोलका

2
यह वैश्विक पर्यावरण चर सेट करने का एक अच्छा तरीका है (फिर भी एक और चीज़ जो मैंने आज सीखी), लेकिन जैसा कि मैंने पोस्ट में उल्लेख किया है, मैं और अधिक पाइथोनिक तरीके की तलाश कर रहा था :)
लैटनिअस

4

मैं अजगर के पथ संशोधन के बारे में अपने निष्कर्षों को संक्षेप में बताना चाहूंगा। इसे करने के दो तरीके हैं।

  • .pth फ़ाइल
  • PYTHONPATH

कोई भी .pth फ़ाइल जो डिफ़ॉल्ट पथ पर पाई जाती है (bellow देखें) में इसकी सामग्री शामिल हो जाएगी sys.path। कहा गया .pth फ़ाइल का प्रारूप सरल है: प्रति पंक्ति एक (फ़ोल्डर) पथ। हैरानी की बात है कि .pth फ़ाइल के लिए पथ निरपेक्ष या सापेक्ष हो सकते हैं ।

डिफ़ॉल्ट पथ वह जगह है जहाँ दुभाषिया रहता है और <some-prefix>/lib/python<version>/site-packagesजहाँ <some-prefix>आमतौर पर है /usr/

PYTHONPATHआपके ऑपरेटिंग सिस्टम का पर्यावरणीय चर है। यूनिक्स सिस्टम पर आप उन्हें सूचीबद्ध करते हैं env। इस तरह के चर का वैश्विक संशोधन .sh लिपियों के माध्यम से /etc/profile.d/फ़ोल्डर के माध्यम से किया जाता है, जैसा कि @ TestUser16418 द्वारा उल्लेख किया गया है।


2
यह "_" के बिना PYTHONPATH है
heroxbd

1

उदाहरण के लिए, यदि आप उस sudsमॉड्यूल को आयात करना चाहते हैं जो .eggफ़ाइल के रूप में उपलब्ध है :

egg_path = '/home/shahid/suds_2.4.egg'

sys.path.append(egg_path)

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