मैं एक परियोजना के भीतर पाइथन स्क्रिप्ट का एक परिवार लिख रहा हूं; प्रत्येक स्क्रिप्ट परियोजना की उपनिर्देशिका के भीतर है, जैसे:पायथन: स्क्रिप्ट के परिवार के बीच सामान्य कोड साझा करना
projectroot
|
|- subproject1
| |
| |- script1.main.py
| `- script1.merger.py
|
|- subproject2
| |
| |- script2.main.py
| |- script2.matcher.py
| `- script2.merger.py
|
`- subproject3
|
|- script3.main.py
|- script3.converter.py
|- script3.matcher.py
`- script3.merger.py
अब कई स्क्रिप्ट कुछ कोड साझा करते हैं। साझा कोड को प्रोजेक्ट का सबसे अच्छा हिस्सा माना जाता है, और कुछ ऐसा नहीं जो मैं अलग से संकलित करता हूं और पुस्तकालय को साइटवेइड पायथनपैथ में छोड़ देता हूं या छोड़ देता हूं। मैं उस कोड को विभिन्न स्थानों पर रख सकता हूं, जैसे कि projectroot
निर्देशिका में, या projectroot
की एक बच्चे निर्देशिका में common
(शायद) कहा जाता है।
हालांकि, तरीके मैं अब तक के बारे में सोचा है के सबसे __init__.py
फ़ाइलों खाली साथ अपने उप से बाहर संकुल बनाने और रिश्तेदार आयात का उपयोग कर (या प्रचुरता से हर subproject में sys.path
साथ खिलवाड़ शामिल है। इससे भी बदतर है, यह एक पैकेज संरचना का निर्माण की तरह लगता है लिपियों के इस परिवार को अस्वीकार कर दिया PEP-3122 से निम्न चेतावनी के afoul चलाता है चारों ओर:
Attention! This PEP has been rejected. Guido views running scripts within a package as an anti-pattern.
तो एक पैकेज में स्क्रिप्ट विरोधी patternish, मैं कैसे एक तरह से जो एक ही में आम कोड रहता है में चीजों को सेट कर सकते हैं है प्रोजेक्ट? या यहां एक मॉड्यूल और पैकेज-आधारित सिस्टम स्वीकार्य है? सबसे साफ दृष्टिकोण कौन सा है? (एफडब्ल्यूआईडब्ल्यू मैं टी पसंद करूंगा o प्रोजेक्ट रूट निर्देशिका में shared.py
या common.py
जैसी फ़ाइल है, जो कि "असली" सबप्रोजेक्ट्स के लिए एक भाई बहन है।
मेरा मानना है कि django अपनी सभी स्क्रिप्ट चलाने के लिए केंद्रीकृत प्रविष्टि बिंदु 'manage.py' का उपयोग करता है। ऐसा कुछ करने से आप अपने 'सबप्रोजेक्टएक्स' को पैकेज में बदल सकते हैं, और "manage.py'" (एंट्री पॉइंट) स्क्रिप्ट के अंदर केंद्रीकृत आयात को संभाल सकते हैं। संकुल के रूप में, मेरा मानना है कि यह आसानी से 'सामान्य' मॉड्यूल का समर्थन करेगा जहां आपकी साझा कार्यक्षमता लाइव हो सकती है। – dm03514
मुझे विश्वास है कि [पीईपी -3122] होना चाहिए (https://www.python.org/dev/peps/pep-3122/), पीईपी -32122 नहीं। – user1071847