2011-11-09 20 views
24

ConfigParsermuch debated पायथन के लिए वेनिला कॉन्फ़िगरेशन पार्सर है।
हालांकि आप बस import config कर सकते हैं जहां config.py में पाइथन कोड है जो कॉन्फ़िगरेशन पैरामीटर सेट करता है।कॉन्फ़िगरर्स बनाम आयात कॉन्फ़िगरेशन

कॉन्फ़िगरेशन के इन दो दृष्टिकोणों के पेशेवर \ विपक्ष क्या हैं? मुझे प्रत्येक को कब चुनना चाहिए?

उत्तर

19

सबसे बड़ी समस्या मैं import config साथ देखते हैं कि आप नहीं जानते है क्या जब क्या होगा आप इसे आयात करते हैं। हां, आपको उन प्रतीकों का एक सेट मिलेगा जिन्हें . शैली इंटरफ़ेस का उपयोग करके स्वाभाविक रूप से संदर्भित किया गया है। लेकिन विन्यास फाइल में कोड भी कर सकता है जो जानता है-क्या। अब, यदि आप अपने उपयोगकर्ताओं पर पूरी तरह भरोसा करते हैं, तो उन्हें कॉन्फ़िगरेशन फ़ाइल में जो कुछ भी लगता है, वह करने की अनुमति देता है, संभवतः एक अच्छी बात है। हालांकि, अगर आपके पास अज्ञात मात्राएं हैं, या आप उपयोगकर्ताओं से खुद को सुरक्षित रखना चाहते हैं, तो एक अधिक पारंपरिक प्रारूप में कॉन्फ़िगरेशन फ़ाइल रखना सुरक्षित और अधिक सुरक्षित होगा।

+3

यह वास्तव में एक अच्छा मुद्दा है कि मैंने अपने पूरे विश्वास के कारण विचार नहीं किया था। – jathanism

6

"आयात कॉन्फ़िगरेशन" बहुत सरल, लचीला और शक्तिशाली है, लेकिन चूंकि यह कुछ भी कर सकता है, तो यह विश्वसनीय हो सकता है कि config.py सुरक्षित स्थान पर नहीं है।

3

आईएमओ यह व्यक्तिगत शैली के मामले में आता है। क्या आप अपनी कॉन्फ़िगरेशन को संपादित करने के लिए तीसरे पक्ष के लिए इरादा रखते हैं? यदि ऐसा है, तो शायद यह अधिक "प्राकृतिक" कॉन्फ़िगरेशन शैली एक ला ConfigParser है जो तकनीकी के रूप में नहीं है और यह आपके लक्षित दर्शकों के सिर पर बहुत दूर नहीं हो सकता है।

Fabric और Django जैसी कई लोकप्रिय परियोजनाएं "देशी" कॉन्फ़िगरेशन शैली का उपयोग करती हैं जो अनिवार्य रूप से केवल एक पायथन मॉड्यूल है। फैब्रिक में fabfile.py है और Django settings.py है।

कुल मिलाकर, आप मॉड्यूल को आयात करने के मूल दृष्टिकोण का उपयोग करके बहुत अधिक लचीलापन प्राप्त करने जा रहे हैं क्योंकि आप उस फ़ाइल में कुछ भी कर सकते हैं जिसमें परिभाषित कार्य, कक्षाएं इत्यादि शामिल हैं क्योंकि यह सिर्फ एक और पायथन मॉड्यूल है आप आयात कर रहे हैं

7

यह completley स्क्रिप्ट के लिए आपकी आवश्यकताओं और लक्ष्यों पर निर्भर करता है। एक तरीका वास्तव में "बेहतर" नहीं है, बस अलग है। अजगर पारसर्स (ConfigParser और config मॉड्यूल सहित) विन्यास के सबसे पर एक बहुत ही विस्तृत चर्चा के लिए, देखें:

Python Wiki - ConfigParserShootout