this answer में इस बात का बहुत अच्छी चर्चा नहीं है, और आप शायद अंतर के बीच और नियमित संकुल स्पष्ट करने के लिए PEP 420 से परिचित होना चाहिए (__init__.py
का उपयोग करें) और नाम स्थान संकुल (नहीं करते हैं)।
मैं उत्तर के माध्यम से जो पेशकश करता हूं वह पढ़ने, संदर्भ और राय का संयोजन है। यहां "कैननिकल" या "पायथनिक" होने का कोई दावा नहीं है।
क्या [प्रारंभिक] पाइथन 3.3+ के साथ अभी भी प्रासंगिक मामलों का उपयोग कर रहे हैं?
हाँ। उपयोग के मामले के रूप में अपना example लें, जहां पैकेज लेखक रूट आइटम नामस्थान में कई चीजें लाने के लिए चाहता है ताकि उपयोगकर्ता को अपनी आंतरिक संरचना से खुद को चिंता न करें।
एक और मामला मॉड्यूल के hierarchy बना रहा है। यही कारण है कि संदर्भ (ओ रेली) वास्तव में कहते हैं:
__init__.py
फ़ाइलों के प्रयोजन के वैकल्पिक प्रवर्तन कोड एक पैकेज के रूप में विभिन्न स्तरों सामना होता है चलाता है कि शामिल करने के लिए है।
वे पाते हैं कि चर्चा में नाम स्थान संकुल पर विचार करते हैं, लेकिन जारी रखने के लिए: अगर आप सिर्फ एक नए पैकेज के निर्माण के साथ बाहर शुरू कर रहे हैं
सभी बातों के समान होने के नाते, __init__.py
फ़ाइलों में शामिल हैं।
तो, आपके दूसरे प्रश्न के लिए,
यह पूरी तरह संभव हो तो __init__.py
से बचने के लिए सबसे अच्छा अभ्यास है?
नहीं, जब तक आपका मंतव्य एक नियमित रूप से पैकेज के बजाय एक नाम स्थान पैकेज बनाने के लिए है, जो मामले में आप नहीं करना चाहिए उपयोग __init__.py
।
आप ऐसा क्यों चाहते हैं?ओ रेली संदर्भ है स्पष्ट example के बारे में मैं क्यों नाम स्थान संकुल शांत कर रहे हैं, जो पतन करने में सक्षम किया जा रहा है अलग, स्वतंत्र रूप से बनाए रखा संकुल से नामस्थान देखा है:
foo-package/
spam/
blah.py
bar-package/
spam/
grok.py
कौन सा
>>> import sys
>>> sys.path.extend(['foo-package', 'bar-package'])
>>> import spam.blah
>>> import spam.grok
>>>
की अनुमति देता है
तो कोई भी नाम कोड अपने कोड के साथ बढ़ा सकता है। ठंडा।
'__init __। Py' का उपयोग जारी रखने के लिए, मुझे देखने का एकमात्र असली कारण पीछे की संगतता के लिए है। –
@leaf तो [उदाहरण] (http://stackoverflow.com/a/29509611/336527) के बारे में क्या मैंने उल्लेख किया? Python 3.3+ में ऐसा करने के लिए एक कैननिक तरीका क्या है? – max