2013-04-19 7 views
68

में निर्देशिका जोड़ना मैं एक विशेष निर्देशिका से मॉड्यूल आयात करने की कोशिश कर रहा हूं।sys.path/PYTHONPATH

समस्या यह है कि अगर मैं sys.path.append(mod_directory) का उपयोग पथ जोड़ और उसके बाद अजगर दुभाषिया को खोलने के लिए, निर्देशिका mod_directory सूची sys.path के अंत में जोड़ा जाता है। यदि मैं पाइथन दुभाषिया खोलने से पहले PYTHONPATH चर निर्यात करता हूं, तो निर्देशिका सूची की शुरुआत में जोड़ दी जाती है। बाद के मामले में मैं मॉड्यूल आयात कर सकता हूं लेकिन पूर्व में, मैं नहीं कर सकता।

किसी स्पष्टीकरण दें कि यह हो रहा है और मुझे शुरू करने के लिए mod_directory, एक अजगर स्क्रिप्ट के अंदर जोड़ने के लिए एक समाधान दे सकते हैं?

+0

मैंने ['साइट' मॉड्यूल] (https://docs.python.org/3/library/site.html#site.addsitedir) की कोशिश की है। –

उत्तर

95

यह दस्तावेज के रूप में काम कर रहा है। PYTHONPATH में निर्दिष्ट किसी भी पथ को सामान्य रूप से कार्यशील निर्देशिका के बाद आने वाले मानक दुभाषिया-आपूर्ति पथ से पहले दस्तावेज किया जाता है। sys.path.append() मौजूदा पथ में संलग्न है। here और here देखें। आप एक विशेष निर्देशिका पहले आना चाहते हैं, बस sys.path के सिर पर डालने:

import sys 
sys.path.insert(0,'/path/to/mod_directory') 

जिसके अनुसार, वहां आम तौर पर बेहतर तरीके या तो PYTHONPATH का उपयोग कर या सीधे sys.path जोड़ तोड़ से आयात प्रबंधन करने के लिए कर रहे हैं। उदाहरण के लिए, this question के उत्तर देखें।

+0

उत्तर के लिए धन्यवाद। समस्या यह थी कि मुझे एहसास नहीं हुआ कि एक .egg फ़ाइल के रूप में पैक किए गए मॉड्यूल को जोड़ने के लिए आपको केवल python 2.6 – UnadulteratedImagination

+1

में निर्देशिका के बजाय फ़ाइल नाम शामिल करना होगा, हे मेरे आदमी ने यह मेरा django तोड़ दिया। क्या आप वाकई लोगों को शीर्ष पर रखने के लिए कहने का मतलब रखते हैं?!? !! –

+12

@RClaven, क्षमा करें, यह बताना मुश्किल है कि आप किस क्रिया और परिणामों का जिक्र कर रहे हैं: "इसे शीर्ष पर रखें" और "मेरे django तोड़ दिया" बहुत सटीक नहीं हैं। क्या आप विस्तार से समझा सकते हैं? –

1

आप इस्तेमाल कर सकते हैं:

import os 
path = 'the path you want' 
os.environ['PATH'] += ':'+path 
1

अस्थायी रूप से बदल रहा है dirs काम करता है अच्छी तरह से आयात करने के लिए:

cwd = os.getcwd() 
os.chdir(<module_path>) 
import <module> 
os.chdir(cwd) 
0

जब Windows के तहत Powershell से एक अजगर स्क्रिप्ट चलाने, यह काम करना चाहिए:

$pathToSourceRoot = "C:/Users/Steve/YourCode" 
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required" 

# Now run the actual script 
python your_script.py