2012-03-23 16 views
26

का पूर्ण पथ प्राप्त करें मैं एक यूनिट परीक्षण लिख रहा हूं जिसे मैंने अपनी फ़ाइल को "फिक्स्चर" निर्देशिका में डालने की आवश्यकता है, जो कि मेरी django ऐप निर्देशिका के ठीक नीचे है। मैं इस छवि फ़ाइल को सापेक्ष पथ का उपयोग करके अपने परीक्षण में खोलना चाहता हूं, जिसके लिए मुझे django ऐप का पूर्ण पथ प्राप्त करने की आवश्यकता होगी। क्या django ऐप का पूर्ण पथ प्राप्त करने का कोई तरीका है?django ऐप

उत्तर

41

अजगर मॉड्यूल (Django क्षुधा सहित) एक __file__ विशेषता है कि आप फाइल सिस्टम पर उनके __init__.py फ़ाइल का स्थान बताता है, तो

import appname 
pth = os.path.dirname(appname.__file__) 

आप क्या चाहते हैं करना चाहिए।

सामान्य परिस्थितियों में, os.path.absname(appname.__path__[0]), लेकिन ऐप्स के लिए यह संभव है कि वे अजीब तरीके से फ़ाइलों को आयात करना चाहते हैं।

(मैं हमेशा अपने settings.py में PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) करते हैं, हालांकि -। यह पूर्ण पथ होने की जरूरत है कि विभिन्न सेटिंग्स के लिए आसान बना देता है)

+1

यह वास्तव में सही नहीं है क्योंकि appname .__ path__ एक स्ट्रिंग नहीं है, सूची है। Http://docs.python.org/2/tutorial/modules.html#packages-in-multiple- निर्देशिकाएं –

+5

@ जॉर्ज लॉन्ड आप निश्चित रूप से सही हैं; मेरे मूर्ख आप 'appname .__ पथ __ [0]' कर सकते हैं, हालांकि ऐसा लगता है कि इसे बदलना संभव है; आप 'os.path.dirname (appname .__ फ़ाइल __)' का उपयोग भी कर सकते हैं, क्योंकि '__file__' अंक' __init __। py' फ़ाइल को इंगित करता है। – Dougal

+0

क्या आप अपनी टिप्पणी से मेल खाने के लिए अपना उत्तर बदल सकते हैं क्योंकि उत्तर सबसे अधिक लोग पहले देखते हैं। – Igor

11

आम तौर पर, मैं अपनी सेटिंग्स.py फ़ाइल में जो जोड़ता हूं, इसलिए मैं प्रोजेक्ट रूट का संदर्भ दे सकता हूं।

import os.path 

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

इस विधि को किसी भी पायथन फ़ाइल की निर्देशिका मिल जाएगी।

+0

कि स्मार्ट है, लेकिन यह परियोजना के लिए पथ एप्लिकेशन के लिए नहीं देता है । मेरे मामले में, यह ठीक काम करेगा क्योंकि, फाइल सिस्टम में, मेरा ऐप परियोजना के तहत रहता है, अन्यथा यह नहीं करेगा। क्या कोई तरीका है कि मैं वास्तव में ऐप का मार्ग प्राप्त कर सकता हूं? या यह सबसे नज़दीकी है जो मैं प्राप्त कर सकता हूं? – tamakisquare

+0

आप ऐप में होने वाली फ़ाइल के भीतर इसका उपयोग कर सकते हैं, या os.path.join() – Kekoa

+0

का उपयोग कर PROJECT_ROOT में फ़ोल्डर के भीतर ऐप के पथ को जोड़ सकते हैं। धन्यवाद :) – tamakisquare