निर्देशिका को sys.path / PYTHONPATH में जोड़ना


130

मैं एक विशेष निर्देशिका से एक मॉड्यूल आयात करने की कोशिश कर रहा हूं।

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

क्या कोई समझा सकता है कि ऐसा क्यों हो रहा है और मुझे एक mod_directoryशुरुआत करने के लिए एक अजगर स्क्रिप्ट के अंदर जोड़ने का उपाय देना चाहिए ?


जवाबों:


178

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

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

उन्होंने कहा, आम तौर पर सीधे उपयोग PYTHONPATHया हेरफेर की तुलना में आयात को प्रबंधित करने के बेहतर तरीके sys.pathहैं। उदाहरण के लिए, इस प्रश्न के उत्तर देखें ।


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

2
अरे यार, इसने मेरा डाँग तोड़ दिया। क्या आप वाकई इसे शीर्ष पर रखने के लिए लोगों को बताने के लिए सुनिश्चित हैं?!? !!?
आर क्लवेन

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

Sys.path कैसे काम करता है, इसके बारे में अधिक जानने के लिए, इस उत्तर को देखें stackoverflow.com/a/38403654/850326
djhaskin987

2
आपको वास्तव में "0" के बजाय "1" का उपयोग करना चाहिए! अन्यथा आप sys.path को तोड़ देते हैं । यह भी देखें stackoverflow.com/q/10095037/125507
केडे


6

मेरे लिए, मुझे अपने अजगर पथ के लिए कैफीन की जरूरत है। मैं जोड़कर फ़ाइल के लिए पथ /home/xy/.bashrcजोड़ सकता हूँ

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH

मेरी /home/xy/.bashrcफाइल पर।

लेकिन जब मैं pycharm का उपयोग करता हूं, तो पथ अभी भी अंदर नहीं है।

तो मैं PYTHONPATHचर को जोड़ सकता हूं , रन -> कॉन्फ़िगरेशन को संपादित करके।

यहाँ छवि विवरण दर्ज करें


सबसे सरल उत्तर है, इसे जोड़ें विकास के लिए स्वत: पूर्ण कार्य करेंगे
गैंग

मैंने .bashrc को ऊपर बताए अनुसार अपडेट किया है लेकिन ज्यूपिटर नोटबुक में प्रतिबिंबित नहीं किया है। Jupyter नोटबुक अभी भी कहता है कि मॉड्यूल नहीं मिला।
अथर

3

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

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

0

विंडोज के तहत पॉवर्स से पायथन स्क्रिप्ट चलाते समय, यह काम करना चाहिए:

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

# Now run the actual script
python your_script.py
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.