2010-11-08 19 views
14

मैं अपने पायथन परियोजनाओं में बस उस बिंदु पर पहुंचना शुरू कर रहा हूं जिसे मुझे कई पैकेजों का उपयोग शुरू करने की आवश्यकता है और मैं थोड़ा उलझन में हूं कि सबकुछ एक साथ कैसे काम करना है। पैकेज के __init__.py में वास्तव में क्या जाना चाहिए? मुझे लगता है कि कुछ परियोजनाओं में केवल खाली inits हैं और उनके सभी कोड उस पैकेज में मॉड्यूल में हैं। अन्य परियोजनाएं लागू होती हैं जो कि पैकेज के वर्गों और इनिट के अंदर कार्यों का बहुमत है।पायथन मॉड्यूल लेआउट

क्या कोई दस्तावेज़ या शैली मार्गदर्शिका या कुछ है जो वर्णन करता है कि पाइथन लेखकों को पैकेज के उपयोग और __init__ फ़ाइल के लिए क्या दिमाग में था?

संपादित करें:
मैं सबसे सरल अर्थ है कि यह एक फ़ोल्डर एक पैकेज में आता है में __init__.py फ़ाइल होने की बात पता है। लेकिन मैं उसी फ़ोल्डर (पैकेज) में मॉड्यूल के बजाय वहां एक फ़ंक्शन क्यों लगाऊंगा?

उत्तर

8

__init__.py खाली हो सकता है, लेकिन क्या यह वास्तव में करता है यकीन है कि अजगर को सही ढंग से अपने निर्देशिका व्यवहार करता है, किसी भी प्रारंभ आप जब अपने पैकेज आयात किया जाता है (पर्यावरण या कुछ और उन पंक्तियों के साथ विन्यस्त करने), या __all__ तो परिभाषित करने के लिए आवश्यकता हो सकती है प्रदान करना है कि Python जानता है कि जब कोई from package import * का उपयोग करता है तो क्या करना है।

आपको जो कुछ भी जानने की आवश्यकता है उसे docs on Packages में वर्णित किया गया है। Dive Into Python also has a piece on packaging.

1

आप पहले ही जानते हैं, मुझे लगता है कि __init__.py फ़ाइलों को पाइथन को निर्देशिका वाले पैकेजों के रूप में उपयोग करने की आवश्यकता है।

  1. उपरोक्त मॉडल में __init__.py खाली रह सकता है।

  2. आप पैकेज के लिए प्रारंभिक कोड भी निष्पादित कर सकते हैं।

  3. आप __all__ चर सेट भी कर सकते हैं।

[संपादित करें: सीखी] जब आप "पैकेज आयात मद से" करते हैं, या "से पैकेज आयात *", तो चर __all__ चयनित संकुल आयात करने के लिए इस्तेमाल किया जा सकता।

देखें:। http://docs.python.org/tutorial/modules.html

+0

'__init __ py',' __all__'। डबल अंडरस्कोर –

+0

@ राफ केटलर: धन्यवाद। हां, समस्याएं संपादित करें। मेरा जवाब तुम्हारा जैसा ही है और मैंने इसे पोस्ट करने से पहले इसे नहीं देखा। – pyfunc

+0

'पैकेज आयात आइटम से' के लिए, परिवर्तनीय '__all__' जो प्रकट होता है उसे नियंत्रित नहीं करता है। यदि 'item' एक मॉड्यूल या उप-पैकेज है, और आप Windows पर हैं, तो' __all__' 'item' के पूंजीकरण को नियंत्रित कर सकता है, लेकिन यह उस पर नियंत्रण नहीं करता है जिसे आप एक्सेस कर सकते हैं। –

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