पायथन लिपि में, मैं PYTHONPATH कैसे सेट करूं?


115

मुझे पता है कि इसे मेरे / etc / प्रोफाइल और मेरे पर्यावरण चर में कैसे सेट किया जाए।

लेकिन क्या होगा अगर मैं इसे एक स्क्रिप्ट के दौरान सेट करना चाहता हूं? क्या यह os, sys का आयात करता है? मैं यह कैसे करुं?

जवाबों:


192

आप सेट नहीं करते हैं PYTHONPATH, आप प्रविष्टियों को जोड़ते हैं sys.path। यह उन निर्देशिकाओं की एक सूची है जिन्हें पायथन पैकेजों के लिए खोजा जाना चाहिए, ताकि आप अपनी निर्देशिकाओं को उस सूची में जोड़ सकें।

sys.path.append('/path/to/whatever')

वास्तव में, पथ विभाजक चरित्र ( लिनक्स पर सिस्टम, विंडोज पर) sys.pathके मूल्य को विभाजित करके शुरू किया जाता है ।PYTHONPATH:;

आप निर्देशिकाओं का उपयोग करके भी जोड़ सकते हैं site.addsitedir, और यह विधि .pthआपके द्वारा पारित निर्देशिकाओं के भीतर मौजूद फाइलों को भी ध्यान में रखेगी। (यह आपके द्वारा निर्दिष्ट निर्देशिकाओं के मामले में नहीं होगा PYTHONPATH।)


11
इस उत्तर को पोस्ट किए हुए कई साल हो गए हैं, लेकिन मैं अभी भी जोड़ना चाहता हूं कि यदि आप यह सुनिश्चित करना चाहते हैं कि पायथन आयात करते समय अन्य सभी से पहले नई निर्देशिका की जांच करता है, तो आपको नई निर्देशिका को पहले सूची में रखना चाहिए, जैसे में है sys.path.insert(0, '/path/to/whatever')
वीकसम

39

आप इसके माध्यम से पर्यावरण चर प्राप्त कर सकते हैं और सेट कर सकते हैं os.environ:

import os
user_home = os.environ["HOME"]

os.environ["PYTHONPATH"] = "..."

लेकिन चूंकि आपका दुभाषिया पहले से ही चल रहा है, इसलिए इसका कोई प्रभाव नहीं होगा। आप बेहतर उपयोग कर रहे हैं

import sys
sys.path.append("...")

वह सरणी जो आपके PYTHONPATHदुभाषिया स्टार्टअप में बदल जाएगी।


18

यदि आप sys.path.append('dir/to/path')जांच के बिना डालते हैं तो यह पहले से ही जोड़ा जाता है, तो आप एक लंबी सूची बना सकते हैं sys.path। उसके लिए, मैं यह सलाह देता हूं:

import sys
import os # if you want this directory

try:
    sys.path.index('/dir/path') # Or os.getcwd() for this directory
except ValueError:
    sys.path.append('/dir/path') # Or os.getcwd() for this directory

2
अच्छा लगा। बहुत पाइथोनिक।
PartialOrder

1
मैं पायथनपैथ को कैसे खाली कर सकता हूं? मैं जोड़ना नहीं चाहता। मैं इसे खाली करना चाहता हूं और जो मैं चाहता हूं उसे अंदर रखूं। क्या इसे करने का कोई तरीका है?
Schütze

क्या आपने sys.path .__ init __ () को कॉल करके इसे पुनः आरंभ करने का प्रयास किया? यह अजगर पथ खाली करना चाहिए। उम्मीद है की यह मदद करेगा।
थेज

@ francisco-manuel-garca-botella पुराने सवालों के जवाब देने का इस साइट पर बहुत स्वागत है! क्षमा करने के लिए कुछ भी नहीं है।
user7610

मैं असहमत हूं कि यह अजगर है, और मैं सुझाव दूंगा कि यह एक अच्छा प्रोग्रामिंग दृष्टिकोण नहीं है। अपवाद होने पर एक्सेप्शन हैंडलिंग बहुत महंगी है, इसलिए आप इसे "यदि" स्टेटमेंट में बदलने के लिए उपयोग नहीं करना चाहते हैं जहाँ यह बहुत संभव है कि आप अन्य का उपयोग करेंगे। एक सरल अगर sys.path में 'mypath' ... और ... मेरी सलाह होगी।
मार्कगलासी

6

PYTHONPATH sys.path में समाप्त होता है , जिसे आप रनटाइम पर संशोधित कर सकते हैं।

import sys
sys.path += ["whatever"]

क्या @DavidZ से इस जवाब को पसंद करने का कोई कारण है?
or

यदि और कुछ नहीं, तो यह कम क्रिया है।
त्रिकाल

-1

आप सेट कर सकते हैं PYTHONPATH, के द्वारा os.environ['PATHPYTHON']=/some/path, फिर आपको कॉल करने की जरूरत है os.system('python')नए जोड़े गए पथ प्रभावी बनाने के लिए अजगर खोल पुनः आरंभ करने की।


1
os.system()"अजगर शेल को पुनः आरंभ नहीं करता है", यह एक नया इंटरैक्टिव पायथन उदाहरण शुरू करता है। जब आप उससे लौटते हैं, तो आप कॉलिंग स्क्रिप्ट में वापस आ जाते हैं।
ट्रिपलए

-2

मैं यह भी काम करता है linux:

import sys
sys.path.extend(["/path/to/dotpy/file/"])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.