python - पायथन में कॉन्फ़िगरेशन फ़ाइल कहाँ रखी जाए?




pythonpath configparser (4)

एक अन्य विकल्प यह है कि सभी .cfg और .ini फाइलों को होम डायरेक्टरी में रखें, जैसे 'बोटो' करता है।

import os.path
config_file = os.path.join(os.path.expanduser("~"), '.myproject')

विकास मोड में, मेरे पास निम्नलिखित डायरेक्टरी ट्री है:

| my_project/
| setup.py
| my_project/
    | __init__.py
    | main.py
    | conf/
        | myproject.conf

मैं myproject.conf फ़ाइल को पार्स करने के लिए ConfigParser का उपयोग करता ConfigParser

मेरे कोड में, फ़ाइल को एक अच्छे रास्ते से लोड करना आसान है: my_project/conf/myproject.conf

समस्या यह है: जब मैं सेटअप प्रोजेक्ट का उपयोग करके अपना प्रोजेक्ट स्थापित करता हूं, तो कॉन्फ़िगरेशन फ़ाइल /etc/my_project/myproject.conf में /etc/my_project/myproject.conf (सेटअप के लिए धन्यवाद) स्थित /etc/my_project/myproject.conf और मेरा आवेदन /usr/lib/python<version>/site-packages/my_project/ /etc/my_project/myproject.conf /usr/lib/python<version>/site-packages/my_project/

मैं अपनी परियोजना में "उत्पादन" मोड में अपने my_project/conf/myproject.conf फ़ाइल को कैसे संदर्भित कर सकता हूं, और "devel" मोड में स्थानीय फ़ाइल ( my_project/conf/myproject.conf ) का उल्लेख कर सकता my_project/conf/myproject.conf

इसके अलावा, यदि संभव हो तो मैं पोर्टेबल होना चाहूंगा (उदाहरण के लिए विंडोज़ पर काम करें)।

ऐसा करने के लिए अच्छा अभ्यास क्या है?


क्या आपने देखा है कि कॉन्फ़िगरेशन फ़ाइलें कैसे काम करती हैं? "आरसी" फाइलों पर पढ़ें, जैसा कि वे कभी-कभी कहते हैं। "बैश आर्क", "विम्स्क", आदि।

कॉन्फ़िगरेशन फ़ाइल के लिए आमतौर पर बहु-चरणीय खोज होती है।

  1. स्थानीय निर्देशिका। ./myproject.conf

  2. उपयोगकर्ता की घरेलू निर्देशिका ( ~user/myproject.conf )

  3. एक मानक सिस्टम-वाइड निर्देशिका ( /etc/myproject/myproject.conf )

  4. पर्यावरण चर नाम से एक जगह ( MYPROJECT_CONF )

पायथन इंस्टॉलेशन देखने के लिए अंतिम स्थान होगा।

config= None
for loc in os.curdir, os.path.expanduser("~"), "/etc/myproject", os.environ.get("MYPROJECT_CONF"):
    try: 
        with open(os.path.join(loc,"myproject.conf")) as source:
            config.readfp( source )
    except IOError:
        pass


appdirs पैकेज विभिन्न प्लेटफार्मों पर स्थापित एप्लिकेशन के लिए मानक स्थान खोजने पर एक अच्छा काम करता है। मुझे आश्चर्य है कि डेवलपर्स के लिए "अनइंस्टाल्ड" स्थिति के कुछ प्रकार की खोज या अनुमति देने के लिए इसका विस्तार करने से समझ में आएगा।





configparser