मेरे कुछ Django ऐप्स में मैं विभिन्न वातावरण (जैसे विकास, परीक्षण और उत्पादन) पर अलग-अलग सेटिंग्स को ओवरराइड करने के लिए settings_local.py
फ़ाइल का उपयोग कर रहा हूं। मैं मूल रूप से निम्नलिखित कोड का इस्तेमाल किया है settings.py
में इसकी सामग्री शामिल करने के लिए:पायथन: 'आयात *' बनाम execfile
try:
from settings_local import *
except ImportError:
sys.stderr.write("The settings_local.py file is missing.\n")
DEBUG=False
मैं हाल ही में execfile
समारोह पाया है और की तरह कुछ करने के लिए बंद कर:
try:
execfile(path.join(PROJECT_ROOT, "settings_local.py"))
except IOError:
sys.stderr.write("The settings_local.py file is missing.\n"
DEBUG=False
दोनों काम के रूप में इरादा है, लेकिन मैं मैं उत्सुक हूं कि मुझे कोई गॉथस याद आ रहा है, और सामान्य रूप से कौन सा दृष्टिकोण अधिक अनुशंसित है और क्यों।
'__file__' आसानी से तर्कों के माध्यम से प्रदान किया जा सकता है। मुख्य अंतर यह है कि मॉड्यूल को एक बार आयात किया जाता है इससे कोई फर्क नहीं पड़ता कि 'आयात मॉड्यूल' कितनी बार निष्पादित किया जाता है ('exec' फ़ाइल को हर बार फ़ाइल निष्पादित करता है), और 'आयात' को फ़ाइल के स्पष्ट पथ की आवश्यकता नहीं होती है (तो यह भी एक ज़िप संग्रह के अंदर काम करेगा)। – jfs
@ जेएफ। सेबेस्टियन यह एक जवाब होना चाहिए। – Marcin
एक लाभ जो मैंने execfile के बारे में पाया (आयात के विपरीत) यह है कि मैं इसे गतिशील रूप से कर सकता हूं। विशेष रूप से, यदि मेरे पास सेटिंग मॉड्यूल की एक सूची है, तो मैं सूची के माध्यम से एक लूप कर सकता हूं, प्रत्येक पर execfile को कॉल कर सकता हूं। क्या इसके बजाय आयात के साथ ऐसा करने का कोई तरीका है? –