मैं एक प्रोग्रामर के बजाय एक अकादमिक हूं, और मुझे अपने शोध का समर्थन करने के लिए अपने स्वयं के उपयोग के लिए पायथन कार्यक्रमों को लिखने का कई वर्षों का अनुभव है। मेरी नवीनतम परियोजना मेरे साथ-साथ कई अन्य लोगों के लिए उपयोगी होने की संभावना है, और मैं इसे एक ओपन-सोर्स पायथन लाइब्रेरी के रूप में जारी करने के बारे में सोच रहा हूं।
हालांकि, एक कामकाजी निजी परियोजना से पुस्तकालय में जाने के लिए पार करने के लिए काफी कुछ बाधाएं प्रतीत होती हैं जिन्हें स्थापित किया जा सकता है और दूसरों के लिए दर्द रहित रूप से उपयोग किया जा सकता है। यह प्रश्न पहले चरणों के बारे में है, जिन्हें मुझे सार्वजनिक रिलीज़ की दिशा में काम करना शुरू करने के लिए करना चाहिए।
वर्तमान में, मेरे पास एक एकल git रिपॉजिटरी है जिसमें मेरा कोड है जो लाइब्रेरी के साथ-साथ लाइब्रेरी का भी उपयोग करता है, और मैं कुछ भी टूटने की स्थिति में आपातकालीन पूर्ववत बटन के रूप में git का उपयोग करता हूं। यह सब एक एकल उपयोगकर्ता के लिए ठीक काम करता है लेकिन स्पष्ट रूप से उचित नहीं है अगर मैं इसे जारी करना चाहता हूं। जहां मैं समाप्त करना चाहता हूं वह यह है कि मेरी लाइब्रेरी एक अलग रिपॉजिटरी में है और इसे दूसरों के द्वारा इंस्टॉल किया जा सकता है pip
, और इसमें एक स्थिर एपीआई है।
सेटप्टूल आदि का उपयोग करना सीखना शायद इतना कठिन नहीं है कि एक बार मैं इसे प्रकाशित करना चाहता हूं - मेरी समस्या यह जानने में है कि मुझे उस बिंदु तक पहुंचने के लिए कैसे काम करना चाहिए।
तो मेरा सवाल यह है कि सार्वजनिक उपभोग के लिए पायथन लाइब्रेरी प्रोजेक्ट तैयार करने के लिए पहले कौन से कदम उठाने चाहिए? मुझे लाइब्रेरी को जारी करने की दिशा में काम करने के लिए अपनी निर्देशिका संरचना, गिट रिपॉजिटरी आदि को कैसे पुनर्गठित करना चाहिए?
अधिक आम तौर पर, यह बहुत उपयोगी होगा यदि ऐसे संसाधन हैं जो पहली बार ऐसा करने का प्रयास करते समय सहायक होने के लिए जाने जाते हैं। सर्वोत्तम प्रथाओं और बचने की गलतियों, आदि की ओर इशारा करना भी बहुत सहायक होगा।
कुछ स्पष्टीकरण: वर्तमान उत्तर "मेरी पायथन लाइब्रेरी को दूसरों के उपयोग के लिए अच्छा कैसे बना सकता है?" की तर्ज पर एक सवाल का जवाब दे रहे हैं। यह उपयोगी है, लेकिन यह मेरे द्वारा पूछे जाने वाले प्रश्न से अलग है।
मैं इस समय अपनी परियोजना को जारी करने की दिशा में एक लंबी यात्रा की शुरुआत में हूं। मेरे कार्यान्वयन का मूल काम करता है (और वास्तव में अच्छी तरह से काम करता है), लेकिन मैं अपने आगे काम की मात्रा से अभिभूत महसूस कर रहा हूं, और इस प्रक्रिया को कैसे नेविगेट करना है, इसके लिए मार्गदर्शन की तलाश कर रहा हूं। उदाहरण के लिए:
मेरा पुस्तकालय कोड वर्तमान में अपने स्वयं के डोमेन-विशिष्ट कोड के लिए युग्मित है जो इसका उपयोग करता है। यह एक सबफ़ोल्डर में रहता है और उसी गिट रिपॉजिटरी को साझा करता है। आखिरकार, इसे एक स्टैंड-अलोन लाइब्रेरी में बनाने और अपनी खुद की रिपॉजिटरी में रखने की आवश्यकता होगी, लेकिन मैं इस बात को ध्यान में रखता हूं क्योंकि मुझे नहीं पता कि यह कैसे करना है। (न तो 'डेवलपमेंट मोड' में लाइब्रेरी कैसे स्थापित करें, ताकि मैं अभी भी इसे संपादित कर सकूं, न ही दो गिट रिपोज को सिंक में कैसे रखा जाए।)
मेरे डोकस्ट्रिंग्स चटक हैं, क्योंकि मुझे पता है कि अंततः मुझे स्फिंक्स या किसी अन्य उपकरण का उपयोग करना होगा। लेकिन ये उपकरण सीखने में सरल नहीं लगते हैं, इसलिए यह एक प्रमुख उप-परियोजना बन जाता है और मैं इसे बंद रखना चाहता हूं।
कुछ बिंदुओं पर मुझे इसे सेट करने और निर्भरता को ट्रैक करने के लिए सेटप्टूल या किसी अन्य उपकरण का उपयोग करना सीखना होगा, जो काफी जटिल हैं। मुझे यकीन नहीं है कि मुझे अब ऐसा करने की आवश्यकता है या नहीं, और प्रलेखन एक नए उपयोगकर्ता के लिए एक पूर्ण भूलभुलैया है, इसलिए मैं इसे बाद में करने का निर्णय लेता हूं।
मुझे कभी भी व्यवस्थित परीक्षण नहीं करना पड़ा है, लेकिन मैं निश्चित रूप से इस परियोजना के लिए काम करूंगा, इसलिए मुझे यह जानने के लिए परीक्षण के बारे में पर्याप्त (i) सीखना होगा कि मेरी परियोजना के लिए कौन सी कार्यप्रणाली सही है; (ii) सीखें कि मेरे चुने हुए कार्यप्रणाली के लिए कौन से उपकरण उपलब्ध हैं; (iii) मेरे चुने हुए उपकरण का उपयोग करना सीखो; (iv) मेरी परियोजना के लिए परीक्षण सूट आदि लागू करना। यह अपने आप में एक परियोजना है।
अच्छी तरह से अन्य चीजें भी हो सकती हैं जो मुझे भी करनी हैं। उदाहरण के लिए, जॉन्सर्शपे ने एक उपयोगी लिंक पोस्ट किया है जिसमें उल्लेख है कि git-flow, tox, TravisCI, virtualenv और कुकीसटर, जिनमें से कोई भी मैंने पहले नहीं सुना था। (पोस्ट 2013 की है, इसलिए मुझे यह पता लगाने के लिए भी कुछ काम करना होगा कि अभी कितना चालू है।)
जब आप यह सब एक साथ करते हैं तो यह बहुत बड़ी मात्रा में काम होता है, लेकिन मुझे यकीन है कि मैं इसे पूरा कर सकता हूं अगर मैं इसे दूर रखता हूं, और मैं जल्दी में नहीं हूं। मेरी समस्या यह जान रही है कि इसे कैसे प्रबंधित करने योग्य चरणों में तोड़ना है जो एक समय में एक किया जा सकता है।
दूसरे शब्दों में, मैं पूछ रहा हूं कि सबसे महत्वपूर्ण ठोस कदम जो मैं ले सकता हूं, ताकि अंततः एक भरोसेमंद उत्पाद तक पहुंच सके। यदि मेरे पास एक मुफ्त सप्ताहांत है, तो मुझे इनमें से किस चीज़ पर ध्यान केंद्रित करना चाहिए? जो (यदि कोई हो) दूसरों से अलग-थलग किया जा सकता है, ताकि मैं कम से कम एक कदम पूरी तरह से करने की आवश्यकता के बिना कर सकूं? इन चीजों को सीखने का सबसे कुशल तरीका क्या है ताकि मेरे पास अभी भी परियोजना पर ध्यान केंद्रित करने का समय हो? (ध्यान में रखते हुए कि यह सब अनिवार्य रूप से एक शौक परियोजना है, मेरा काम नहीं है।) क्या इसमें से कोई भी ऐसा है जो मुझे वास्तव में करने की आवश्यकता नहीं है , इस प्रकार अपने आप को समय और प्रयास की एक बड़ी राशि बचा रही है?
सभी उत्तरों की बहुत सराहना की जाती है, लेकिन मैं विशेष रूप से उन उत्तरों का स्वागत करता हूं जो आधुनिक पायथन विकास के विशिष्ट संदर्भ के साथ इन परियोजना प्रबंधन पहलुओं पर ध्यान केंद्रित करते हैं।