2010-01-08 13 views
14

मैं अपने एप्लिकेशन को कॉन्फ़िगर करने के लिए कॉन्फ़िगरर्स का उपयोग कर रहा हूं, और अब मैं इसे आसानी से वितरित करना चाहता हूं, और साथ ही कॉन्फ़िगरेशन को सुरक्षित रखता हूं।कॉन्फ़िगरेशन फ़ाइलों के साथ पैकेजिंग पायथन अनुप्रयोग

मुझे लगता है कि मुझे कॉन्फ़िगरेशन फ़ाइल टेम्पलेट्स के साथ एक निर्देशिका की आवश्यकता है, और वास्तव में इनका उपयोग करने के लिए कॉन्फ़िगरेशन उत्पन्न करने का कोई तरीका है। तो मुझे इसे स्टोर करने के लिए एक जगह चाहिए जो वर्चुअलएन्व, उपयोगकर्ता होम निर्देशिका आदि में काम करेगी। मैं चाहता हूं कि यह सामान्य यूनिक्स पैकेज कैसे काम करता है, यानी घर निर्देशिका में ओवरराइड के साथ। क्या इसके लिए एक रेडीमेड समाधान है, और यदि नहीं, तो मुझे अपने सेटअप में इसे क्या करना चाहिए ताकि इसे काम करने के लिए मैं चाहूं?

उत्तर

9

आप जहां भी चाहें फ़ाइलों को स्थापित करने के लिए distutils के data_files विकल्प का उपयोग कर सकते हैं।

setup(..., 
     data_files=[('/etc', ['cfg/config1.ini', 'cfg/config2.ini']), 
        ('/etc/init.d', ['bin/initscript1'])], 
     .... 
    ) 

जब अपने ऐप्लिकेशन पर कॉन्फ़िग फ़ाइल को पढ़ने के लिए, आप एक /home संस्करण यदि वह मौजूद विलय कर सकते हैं, .read() method of ConfigParser objects का उपयोग कर:

files_read = cfgparserobj.read(['/etc/config1.ini', 
           os.path.expanduser('~/.config1.ini')]) 
for fname in files_read: 
    print "Reading config from", fname 

data_files निम्नलिखित तरीके से (directory, files) जोड़े का एक अनुक्रम को निर्दिष्ट करता है

वह /etc/config1.ini पढ़ेगा और फिर उपयोगकर्ता की होम निर्देशिका में .config1.ini से आने वाली सामग्री के साथ परिभाषाओं को ओवरराइट करेगा, यदि यह मौजूद है।

+6

वर्चुअलएन्व के साथ यह काम अच्छा बनाने का कोई तरीका है? अर्थात। myvirtenv/etc/myconf.ini में सामान डालने के लिए मुझे किन पथ निर्दिष्ट करना चाहिए? –

+4

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन फिर भी उपयोगी हो सकती है। @ जोकिम लंदनबोर्ग: आप '' sys.prefix'' का उपयोग कर सकते हैं, जो डिफ़ॉल्ट रूप से ''/usr'' है, और आपके मामले में आपके वर्चुअलएन्व का पथ ('sys.real_prefix'' – linkdd

+0

में वास्तविक उपसर्ग के साथ sys का उपयोग करना .real_prefix बहुत ही आशाजनक प्रतीत होता है, इसके लिए कॉन्फ़िगरेशन फ़ाइल को पढ़ने के लिए रनटाइम पर एक ही स्थान प्राप्त करने का एक तरीका भी आवश्यक होगा; क्या इसका उपयोग उस उद्देश्य के लिए किया जा सकता है? – a1an

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