संस्करण नियंत्रण के तहत IPython पुस्तिकाओं को रखने के लिए एक अच्छी रणनीति क्या है ?
संस्करण नियंत्रण के लिए नोटबुक प्रारूप काफी महत्वपूर्ण है: यदि कोई संस्करण नोटबुक और आउटपुट को नियंत्रित करना चाहता है तो यह काफी अच्छी तरह से काम करता है। झुंझलाहट तब होती है जब कोई केवल सेल आउटपुट (उर्फ "उत्पादों का निर्माण") को छोड़कर इनपुट को नियंत्रित करना चाहता है, जो विशेष रूप से फिल्मों और भूखंडों के लिए बड़े बाइनरी ब्लब्स हो सकते हैं। विशेष रूप से, मैं एक अच्छा वर्कफ़्लो खोजने की कोशिश कर रहा हूँ जो:
- मुझे आउटपुट सहित या बाहर चुनने की अनुमति देता है,
- अगर मैं नहीं चाहता तो मुझे गलती से आउटपुट करने से रोकता है,
- मुझे अपने स्थानीय संस्करण में आउटपुट रखने की अनुमति देता है,
- मुझे यह देखने की अनुमति देता है कि जब मेरे संस्करण नियंत्रण प्रणाली (यानी यदि मैं केवल संस्करण इनपुटों को नियंत्रित करता हूं, लेकिन मेरी स्थानीय फ़ाइल में आउटपुट हैं, तो इनपुट में परिवर्तन होते हैं, तो मैं यह देखना चाहूंगा कि क्या इनपुट बदल गए हैं? )) संस्करण नियंत्रण स्थिति कमांड का उपयोग करना स्थानीय फ़ाइल के आउटपुट के बाद से हमेशा अंतर दर्ज करेगा।)
- मुझे एक अद्यतन स्वच्छ नोटबुक से अपनी कार्य नोटबुक (जिसमें आउटपुट होता है) को अपडेट करने की अनुमति देता है। (अपडेट करें)
जैसा कि उल्लेख किया गया है, अगर मैंने आउटपुट को शामिल करने के लिए चुना (जो उदाहरण के लिए nbviewer का उपयोग करते समय वांछनीय है ), तो सब कुछ ठीक है। समस्या यह है कि जब मैं आउटपुट को नियंत्रित करना नहीं चाहता। नोटबुक के आउटपुट को अलग करने के लिए कुछ उपकरण और स्क्रिप्ट हैं, लेकिन अक्सर मैं निम्नलिखित मुद्दों का सामना करता हूं:
- मैं गलती से आउटपुट के साथ एक संस्करण बनाता हूं, जिससे मेरी रिपॉजिटरी प्रदूषित होती है।
- मैं संस्करण नियंत्रण का उपयोग करने के लिए आउटपुट साफ़ करता हूं, लेकिन वास्तव में आउटपुट को मेरी स्थानीय प्रतिलिपि में रखेगा (कभी-कभी उदाहरण के लिए पुन: पेश करने में कुछ समय लगता है)।
- कुछ स्क्रिप्ट जो स्ट्रिप आउटपुट को
Cell/All Output/Clear
मेनू विकल्प की तुलना में प्रारूप में थोड़ा बदल देती हैं , जिससे डिफरेंसेस में अवांछित शोर पैदा होता है। यह कुछ उत्तरों द्वारा हल किया जाता है। - जब फ़ाइल के स्वच्छ संस्करण में परिवर्तन को खींचते हैं, तो मुझे अपने काम की नोटबुक में उन बदलावों को शामिल करने का कोई तरीका खोजने की जरूरत है, जिसमें सब कुछ फिर से करना न हो। (अपडेट करें)
मैंने कई विकल्पों पर विचार किया है जिनके बारे में मैं नीचे चर्चा करूंगा, लेकिन अभी तक एक अच्छा व्यापक समाधान नहीं मिल पाया है। एक पूर्ण समाधान के लिए IPython में कुछ बदलावों की आवश्यकता हो सकती है, या कुछ सरल बाहरी लिपियों पर निर्भर हो सकते हैं। मैं वर्तमान में मर्क्यूरियल का उपयोग करता हूं , लेकिन ऐसा समाधान चाहूंगा जो जीआईटी के साथ भी काम करे : एक आदर्श समाधान संस्करण-नियंत्रण अज्ञेयवादी होगा।
इस मुद्दे पर कई बार चर्चा की गई है, लेकिन उपयोगकर्ता के दृष्टिकोण से कोई निश्चित या स्पष्ट समाधान नहीं है। इस प्रश्न का उत्तर निश्चित रणनीति प्रदान करना चाहिए। यह ठीक है अगर इसे IPython के हाल के (यहां तक कि विकास) संस्करण या आसानी से स्थापित एक्सटेंशन की आवश्यकता है।
अद्यतन: मैं अपने संशोधित नोटबुक संस्करण के साथ खेल रहा हूं जो ग्रेगरी क्रॉसस्वाइट के सुझावों का.clean
उपयोग करके वैकल्पिक रूप से प्रत्येक संस्करण को सहेजता है । यह मेरी अधिकांश बाधाओं को संतुष्ट करता है लेकिन निम्नलिखित अनसुलझे को छोड़ देता है:
- यह अभी तक एक मानक समाधान नहीं है (इसके लिए ipython स्रोत के संशोधन की आवश्यकता है। क्या इस व्यवहार को एक सरल विस्तार को प्राप्त करने का एक तरीका है? कुछ प्रकार के ऑन-सेव हुक की आवश्यकता है।
- वर्तमान वर्कफ़्लो के साथ मेरे पास एक समस्या है बदलाव को खींचना। ये
.clean
फ़ाइल में आएंगे , और फिर किसी तरह से मेरे काम करने वाले संस्करण में एकीकृत करने की आवश्यकता है। (बेशक, मैं हमेशा नोटबुक को फिर से निष्पादित कर सकता हूं, लेकिन यह एक दर्द हो सकता है, खासकर अगर कुछ परिणाम लंबी गणना, समानांतर गणना, आदि पर निर्भर करते हैं) मुझे अभी तक इस बारे में अच्छा विचार नहीं है कि इसे कैसे हल किया जाए। । शायद ipycache जैसे एक्सटेंशन को शामिल करने वाला वर्कफ़्लो काम कर सकता है, लेकिन यह थोड़ा जटिल लगता है।
टिप्पणियाँ
निकालना (अलग करना) आउटपुट
- जब नोटबुक चल रही हो,
Cell/All Output/Clear
तो आउटपुट को हटाने के लिए कोई भी मेनू विकल्प का उपयोग कर सकता है । - आउटपुट को हटाने के लिए कुछ स्क्रिप्ट हैं, जैसे स्क्रिप्ट nbstripout.py जो आउटपुट को हटा देती है, लेकिन नोटबुक इंटरफ़ेस का उपयोग करते हुए समान आउटपुट का उत्पादन नहीं करती है। यह अंततः ipython / nbconvert repo में शामिल किया गया था , लेकिन इसे यह कहते हुए बंद कर दिया गया है कि परिवर्तन अब ipython / ipython में शामिल हैं , लेकिन संबंधित कार्यक्षमता अभी तक शामिल नहीं हुई है। (अपडेट) यह कहा जा रहा है, ग्रेगरी क्रॉस्साइट के समाधान से पता चलता है कि यह करने के लिए बहुत आसान है, यहां तक कि ipython / nbconvert को आमंत्रित किए बिना, तो यह दृष्टिकोण संभवतः व्यावहारिक है अगर इसे ठीक से हुक किया जा सकता है (इसे प्रत्येक संस्करण नियंत्रण प्रणाली में संलग्न करना, हालांकि, यह एक अच्छा विचार नहीं लगता है - यह किसी तरह नोटबुक तंत्र को हुक करना चाहिए।)
समाचार समूह
मुद्दे
- 977: नोटबुक सुविधा अनुरोध (ओपन) ।
- 1280: सेव ऑप्शन (ओपन) पर क्लियर-ऑल । ( इस चर्चा से )
- 3295: ऑटोएक्सपोर्टेड नोटबुक: केवल स्पष्ट रूप से चिह्नित सेल (बंद) निर्यात करें । विस्तार से हल 11 लेखिका जादू जोड़ें जादू (मर्ज) ।
अनुरोधों को खींचो
- 1621: क्लियर इन] "क्लियर ऑल आउटपुट" (मर्ज) पर प्रॉम्प्ट नंबर । ( 2519 (विलय) भी देखें ।)
- 1563: clear_output में सुधार (विलय) ।
- 3065: नोटबुक्स की अलग-अलग क्षमता (बंद) ।
- 3291: सेव करते समय आउटपुट सेल्स को स्किप करने का विकल्प जोड़ें। (बंद) । यह बेहद प्रासंगिक लगता है, हालांकि "क्लीन / स्मज" फिल्टर का उपयोग करने के सुझाव के साथ बंद किया गया था। एक प्रासंगिक सवाल अगर आप गिट डिफरेंस चलाने से पहले आउटपुट को स्ट्रिप करना चाहते हैं तो आप क्या उपयोग कर सकते हैं? लगता है जवाब नहीं दिया गया।
- 3312: WIP: नोटबुक सेव हुक (बंद) ।
- 3747: ipynb -> ipynb ट्रांसफार्मर (बंद) । यह 4175 में विद्रोह है ।
- 4175: nbconvert: जिंजालेस निर्यातक आधार (मर्ज) ।
- 142: यदि कोई इनपुट नहीं दिया गया है तो ओपनस्टैंड में STDIN का उपयोग करें ।
--script
विकल्प के साथ जाने वाला था , लेकिन इसे हटा दिया गया है। मैं इंतजार कर रहा हूं जब तक कि पोस्ट-सेव हुक लागू नहीं हो जाते ( जो योजनाबद्ध हैं ) जिस बिंदु पर मुझे लगता है कि मैं कई तकनीकों को मिलाकर एक स्वीकार्य समाधान प्रदान करने में सक्षम हूं।