एकल अजगर फ़ाइल वितरण: मॉड्यूल या पैकेज?


24

मान लीजिए कि मेरे पास एक उपयोगी पायथन फ़ंक्शन या क्लास (या जो कुछ भी है) जिसे useful_thingएकल फ़ाइल में मौजूद है। स्रोत वृक्ष को व्यवस्थित करने के लिए आवश्यक दो तरीके हैं। पहला तरीका एकल मॉड्यूल का उपयोग करता है:

- setup.py
- README.rst
- ...etc...
- foo.py

में कहाँ useful_thingपरिभाषित किया गया है foo.py। दूसरी रणनीति पैकेज बनाने की है:

- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py

में कहाँ useful_thingपरिभाषित किया गया है module.py। पैकेज के मामले में __init__.pyइस तरह दिखेगा

from foo.module import useful_thing

ताकि दोनों मामलों में आप कर सकें from foo import useful_thing

प्रश्न: कौन सा तरीका पसंद किया जाता है, और क्यों?

संपादित करें: चूंकि उपयोगकर्ता gnat कहता है कि यह प्रश्न खराब रूप से बनता है, इसलिए मैं यह जोड़ूंगा कि आधिकारिक अजगर पैकेजिंग ट्यूटोरियल टिप्पणी नहीं करता है कि ऊपर वर्णित विधियों में से कौन सा पसंदीदा है। मैं स्पष्ट रूप से पेशेवरों और विपक्षों की अपनी व्यक्तिगत सूची नहीं दे रहा हूं क्योंकि मैं इस बात में दिलचस्पी रखता हूं कि क्या कोई समुदाय पसंदीदा तरीका है, न कि पेशेवरों और विपक्षों की चर्चा उत्पन्न कर रहा है :)


अपने शोध को साझा करना हर किसी की मदद करता है । हमें बताएं कि आपने क्या प्रयास किया है और यह आपकी आवश्यकताओं को पूरा क्यों नहीं करता है। यह दर्शाता है कि आपने खुद को मदद करने का प्रयास करने के लिए समय लिया है, यह हमें स्पष्ट उत्तरों को दोहराने से बचाता है, और सबसे अधिक यह आपको अधिक विशिष्ट और प्रासंगिक उत्तर प्राप्त करने में मदद करता है। यह भी देखें कि कैसे पूछें
gnat

1
@gnat: कैसे पूछना है के लिए लिंक के लिए धन्यवाद। मैं अभ्यास से पूछने वाले अच्छे प्रश्न से वाकिफ हूं, लेकिन इस मामले में मैंने अपना अनुभव देना उचित नहीं समझा, क्योंकि मैंने जो पूछा है, वह संभवत: वही होगा जो मैंने "ए या बी" प्रश्न के रूप में पूछा है। आप इस प्रश्न को बिना राय के आधार पर सुधारने की सलाह कैसे देंगे ?
डेनियलस्क

@gnat: दूसरे शब्दों में, अगर मैं दो तरीकों के लिए पेशेवरों / विपक्षों की सूची में रुचि रखता था, तो मैंने पूछा होगा कि "इन दोनों विधियों के पेशेवरों और विपक्ष क्या हैं" और मेरी अपनी आंशिक सूची शामिल होगी।
डेनियलस्क

जवाबों:


17

आप सबसे सरल काम करते हैं जो आपके लिए काम करता है

एक के लिए एक समारोह मॉड्यूल , वहाँ बिल्कुल एक पैकेज बनाने का कोई मतलब नहीं है। पैकेज एक अतिरिक्त नाम स्थान बनाने और / या कई मॉड्यूल में अपने कोड को व्यवस्थित करने के लिए उपयोगी होते हैं।

jsonऔर unittestअजगर मानक पुस्तकालय में मॉड्यूल वास्तव में कोड संगठन के उद्देश्यों के लिए, उदाहरण के लिए पैकेज है। लेकिन वर्तमान में सिर्फ एक अजगर फ़ाइल में रहने वाले कोड को एक मॉड्यूल के रूप में छोड़ना पूरी तरह से ठीक है।

यदि आप उदाहरण चाहते हैं:

उन परियोजनाओं के अच्छे उदाहरण के लिए जो वास्तव में पैकेजों का उत्कृष्ट उपयोग करते हैं, देखें:

कोई 'आधिकारिक' सिफारिश नहीं है; दोनों विकल्प पूरी तरह से मान्य हैं।


तो कोई आधिकारिक रूप से पसंदीदा तरीका नहीं है?
डेनियलस्क

3
नहीं, कोई पसंदीदा तरीका नहीं है।
मार्टिज़न पीटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.