2010-11-15 12 views
21

मेरे पास एक पायथन मॉड्यूल है जो मॉड्यूल निर्देशिका की उपनिर्देशिका में कुछ संसाधनों का उपयोग करता है। ढेर अतिप्रवाह पर चारों ओर खोज और संबंधित उत्तर खोजने के बाद, मैं की तरहसीडब्ल्यूडी बदल गया है जब मैं पाइथन मॉड्यूल में एक सापेक्ष पथ का उपयोग कैसे करूं?

import os 
os.path.join(os.path.dirname(__file__), 'fonts/myfont.ttf') 

यह ठीक काम करता है जब मैं कहीं और से मॉड्यूल फोन कुछ का उपयोग करके संसाधनों के लिए मॉड्यूल को निर्देशित करने में कामयाब रहे, लेकिन यह टूट जाता है जब मैं मॉड्यूल फोन वर्तमान कार्यशील निर्देशिका को बदलने के बाद। समस्या यह है कि __file__ की सामग्री को एक रिश्तेदार पथ, जिसके खाते में तथ्य यह है कि मैं निर्देशिका बदल नहीं ले करता हैं:

>>> mymodule.__file__ 
'mymodule/__init__.pyc' 
>>> os.chdir('..') 
>>> mymodule.__file__ 
'mymodule/__init__.pyc' 

मैं कैसे __file__ में निरपेक्ष पथ सांकेतिक शब्दों में बदलना कर सकते हैं या को छोड़कर कि, कैसे क्या मैं मॉड्यूल में अपने संसाधनों तक पहुंच सकता हूं इससे कोई फर्क नहीं पड़ता कि वर्तमान कार्यशील निर्देशिका क्या है? धन्यवाद!

उत्तर

39

स्टोर मॉड्यूल के बहुत शुरुआत में मॉड्यूल निर्देशिका का निरपेक्ष पथ:

font_file = os.path.join(package_directory, 'fonts', 'myfont.ttf') 

और सब के बाद, नहीं है:

package_directory = os.path.dirname(os.path.abspath(__file__)) 

बाद में, इस package_directory के आधार पर अपने संसाधनों लोड वर्तमान कार्यशील निर्देशिका जैसे प्रक्रिया-व्यापी संसाधनों में संशोधन। एक अच्छी तरह से लिखित कार्यक्रम में कार्यशील निर्देशिका को बदलने की वास्तविक आवश्यकता नहीं है, इसके परिणामस्वरूप os.chdir() से बचें।

+0

धन्यवाद, यह पूरी तरह से काम करता है! कार्यशील निर्देशिका को बदलने से बचने के लिए मैं आपकी टिप्पणी को ध्यान में रखूंगा। – jvkersch

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