2013-03-06 6 views
6

पर पायथन फ़ाइल संरचना मैं पाइथन पर कुछ ओपन सोर्स प्रोजेक्ट्स पर देख रहा हूं, और मैं बहुत सारी फाइलें और पैटर्न देख रहा हूं जिनसे मैं परिचित नहीं हूं।गिटहब

सबसे पहले, परियोजनाओं का एक बहुत सिर्फ एक फ़ाइल setup.py कहा जाता है, जो आमतौर पर एक समारोह में शामिल है:

setup(blah, blah, blah) 

दूसरा, एक बहुत एक फ़ाइल कि बस __init__.py कहा जाता है और कोई जानकारी नहीं के बगल में शामिल की गई जानकारी ।

if __name__ == "__main__" 

अंत में, मैं अगर वहाँ एक Git भंडार में अजगर फ़ाइलों को विभाजित करने के लिए किसी भी "सर्वोत्तम प्रथाओं" कर रहे हैं सोच रहा हूँ:

तीसरा, कुछ .py फ़ाइलें एक बयान इस के समान होते हैं। जावा के साथ, कक्षा विभाजन की वजह से फ़ाइल विभाजन का विचार बहुत स्वाभाविक रूप से आता है। पायथन के साथ, कई स्क्रिप्ट्स में कोई कक्षा नहीं होती है, और कभी-कभी एक कार्यक्रम में ओओपी पहलू होंगे, लेकिन कक्षा विभाजन द्वारा एक वर्ग इतना समझ में नहीं आता है। क्या यह सिर्फ "कोड को सबसे ज्यादा पढ़ने योग्य बनाता है," या क्या इसके बारे में कुछ दिशानिर्देश हैं?

उत्तर

6

setup.pydistrubution utilities का उपयोग कर पायथन के मॉड्यूल वितरण का हिस्सा है। यह पाइथन मॉड्यूल के easy installation के लिए अनुमति देता है और जब उपयोगी होता है, तो आप अपने प्रोजेक्ट को पूरे पायथन मॉड्यूल के रूप में वितरित करना चाहते हैं।

__init__.py पाइथन के package system के लिए उपयोग किया जाता है। एक खाली फ़ाइल आम तौर पर पाइथन को उस पैकेज को पहचानने के लिए पर्याप्त होती है जो पैकेज में होती है, लेकिन आप इसमें विभिन्न चीजों को भी परिभाषित कर सकते हैं।

अंत में, __name__ == '__main__' चेक यह सुनिश्चित करना है कि वर्तमान स्क्रिप्ट सीधे चलती है (उदा। कमांड लाइन से) और यह किसी अन्य स्क्रिप्ट में आयात नहीं की जाती है। एक पायथन लिपि निष्पादन के दौरान केवल एक ही मॉड्यूल की __name__ संपत्ति __main__ के बराबर होगी। उस विषय पर my answer here या अधिक general question देखें।

1

setup.pydistutils सेटअप प्रक्रिया का हिस्सा है। यदि आप केवल एक मूल स्क्रिप्ट के बजाय मॉड्यूल वितरित कर रहे हैं, तो आप उनमें से एक रखना चाहेंगे (जो तब भी एक अच्छा विचार है ताकि आप बाद में मॉड्यूल में आसानी से विस्तार कर सकें)।

अजगर module import process की __init__.py हिस्सा:

फ़ाइलें init .py एक अजगर पैकेज निर्देशिका के रूप में डिस्क पर निर्देशिका चिह्नित करने के लिए उपयोग किया जाता है नाम दिया है।

आयात स्पैम: आप फ़ाइलें हैं, तो

mydir/स्पैम/init .py mydir/स्पैम/module.py और mydir अपने रास्ते पर है, आप कोड module.py में के रूप में आयात कर सकते हैं .module या

स्पैम आयात मॉड्यूल से आप init .py फ़ाइल, अजगर अब उस निर्देशिका के अंदर submodules के लिए दिखाई देगा, इसलिए प्रयास आयात करने के लिए मॉड्यूल असफल हो जायेगी निकालते हैं।

if __name == "__main__" कोड को इंगित करने का एक तरीका है जो फ़ाइल को सीधे आयात किए जाने के बजाय चलाया गया था, तो निष्पादित किया जाएगा।

कैसे अपने कोड लेआउट के लिए पर जवाब देने के लिए, distfiles प्रलेखन एक good guide on this है।

+0

मुझे क्षमा करें, लेकिन मुझे लगता है कि आपने 'if __name ==" __main __ "में गलती की है, 'आप नाम के बाद' __' भूल गए हैं। जब आप इसे देखते हैं तो मुझे पिंग करें और मैं टिप्पणी हटा दूंगा। –

2

@ पोक के उत्तर के अतिरिक्त, this related question देखें कि एक अजगर परियोजना की निर्देशिका संरचना क्या होनी चाहिए। Here आपकी परियोजना को आसानी से चलाने योग्य बनाने के तरीके पर एक और उपयोगी ट्यूटोरियल है।