बाद के लिए ज्यूपिटर (आईपीथॉन) नोटबुक सत्र को कैसे अचार या स्टोर करें


100

मान लीजिए कि मैं ज्यूपिटर / इफिथॉन नोटबुक में एक बड़ा डेटा विश्लेषण कर रहा हूं, जिसमें बहुत सारे समय की गणना की गई है। फिर, किसी कारण के लिए, मुझे ज्यूपिटर स्थानीय सर्वर को बंद करना होगा, लेकिन मैं बाद में सभी समय लेने वाली संगणनाओं से गुजरने के बिना, बाद में विश्लेषण करने के लिए वापस जाना चाहूंगा।


मैं होगा क्या चाहते करने के लिए प्यार है pickleया पूरे Jupyter सत्र की दुकान (सभी पांडा dataframes, np.arrays, चर, ...) तो मैं सुरक्षित रूप से जानते हुए भी मैं के रूप में बिल्कुल एक ही राज्य में मेरी सत्र पर लौट सकते हैं सर्वर को शट डाउन कर सकते हैं इससे पहले।

क्या यह तकनीकी रूप से भी संभव है? क्या एक अंतर्निहित कार्यक्षमता है जिसे मैंने अनदेखा किया है?


EDIT: इस उत्तर के आधार पर एक %store जादू है जो "हल्का अचार" होना चाहिए। हालाँकि आपको चर को मैन्युअल रूप से स्टोर करना होगा जैसे:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
बंद करने का दृश्य,
%store -r foo ताज़ा करने के लिए कर्नेल # आर को फिर से शुरू करें
print(foo) # "A dummy string"

जो मैं चाहता हूं, उसके काफी करीब है, लेकिन इसे मैन्युअल रूप से करना और विभिन्न सत्रों के बीच अंतर करने में असमर्थ होना इसे कम उपयोगी बनाता है।


1
इस पर कोई प्रगति? मैंने केवल देखा कि स्पाइडर आईडीई में एक कार्यक्षेत्र है जो चर को * .mat में सहेज सकता है। लेकिन यह निश्चित नहीं है कि इसे ज्यूपिटर नोटबुक में पोर्ट किया जा सकता है या नहीं।
cccn1991

क्या आपने pypi.python.org/pypi/dill पर विचार किया है ? "डिल भी क्षमता प्रदान करता है: - सहेजें और अजगर इंटरप्रेटर सत्र को लोड करें" यह अजगर है, हालांकि यह निश्चित नहीं है कि
आईपीथॉन

जवाबों:


64

मुझे लगता है कि डिल आपके प्रश्न का अच्छी तरह से उत्तर देता है।

pip install dill

नोटबुक सत्र सहेजें:

import dill
dill.dump_session('notebook_env.db')

नोटबुक सत्र पुनर्स्थापित करें:

import dill
dill.load_session('notebook_env.db')

स्रोत


1
जब जनरेटर होते हैं (जब मैं इसके बारे में सोचता हूं तो यह समझ में आता है) विफल रहता है, लेकिन ऐसा लगता है कि यह उतना ही करीब है जितना हम उम्मीद कर सकते हैं!
रॉबिन नेमेथ

1
मेरे लिए बहुत अच्छा काम किया। कुछ बातों को ध्यान में रखें: सबसे पहले, यदि आपके पास पाइबोडक कनेक्शन ऑब्जेक्ट हैं जो चारों ओर लटके हुए हैं, तो आपको उन्हें बंद करने की आवश्यकता होगी और फिर उन सभी को किसी और को सेट नहीं करना होगा, आपको "टाइपर्रर: अचार नहीं मिल सकता है। । दूसरा, नोटबुक स्थिति में आपके कोड द्वारा बनाए गए ग्राफ़ शामिल नहीं हैं, इसलिए आपको इन्हें वापस लाने के लिए कक्षों को पुन: चलाने की आवश्यकता होगी।
माइकल स्ज़ेप्पेनायक

लेकिन यह काम नहीं करता है मैंने एक और मशीन पर सहेजी गई फ़ाइल का उपयोग किया
जया ए

27

(मैं इसे वास्तविक उत्तर के रूप में पेश करने की बजाय टिप्पणी नहीं करूंगा, लेकिन मुझे टिप्पणी करने के लिए अधिक प्रतिष्ठा की आवश्यकता है।)

आप एक व्यवस्थित तरीके से अधिकांश डेटा की तरह चर स्टोर कर सकते हैं। मैं आमतौर पर सभी डेटाफ़्रेम , सरणियों आदि को पंडों.एचडीएफस्टोर में स्टोर करता हूं । नोटबुक की शुरुआत में, घोषित करें

backup = pd.HDFStore('backup.h5')

और फिर किसी भी नए चर को स्टोर करें जैसा कि आप उन्हें बनाते हैं

backup['var1'] = var1

अंत में, शायद एक अच्छा विचार है

backup.close()

सर्वर बंद करने से पहले। अगली बार जब आप नोटबुक के साथ जारी रखना चाहते हैं:

backup = pd.HDFStore('backup.h5')
var1 = backup['var1']

सच कहा जाए, तो मैं ipython नोटबुक में अंतर्निहित कार्यक्षमता भी पसंद करूंगा। आप इस तरह से सब कुछ नहीं बचा सकते हैं (जैसे ऑब्जेक्ट्स, कनेक्शन), और इतनी बॉयलरप्लेट कोड के साथ नोटबुक को व्यवस्थित रखना मुश्किल है।


5
यह एक बहुत ही दिलचस्प समाधान है, लेकिन मैं सचमुच इस तरह की प्रणाली को बनाए रखने के साथ जुड़े दर्द को महसूस कर सकता हूं। टिप के लिए धन्यवाद :)
रॉबिन नेमेथ

19

यह प्रश्न संबंधित है: IPython नोटबुक में कैश कैसे करें?

व्यक्तिगत कोशिकाओं के परिणामों को बचाने के लिए, कैशिंग जादू काम आता है।

%%cache longcalc.pkl var1 var2 var3
var1 = longcalculation()
....

नोटबुक को पुन: निर्देशित करने पर, इस सेल की सामग्री कैश से लोड हो जाती है।

यह बिल्कुल आपके प्रश्न का उत्तर नहीं दे रहा है, लेकिन यह पर्याप्त हो सकता है जब सभी लंबी गणनाओं के परिणाम तेजी से बरामद किए जाते हैं। नोटबुक के ऊपर रन-ऑल बटन को हिट करने के संयोजन में यह मेरे लिए एक व्यावहारिक समाधान है।

कैश मैजिक पूरे नोटबुक की स्थिति को अभी तक नहीं बचा सकता है । मेरी जानकारी के लिए "नोटबुक" को फिर से शुरू करने के लिए अभी तक कोई अन्य प्रणाली नहीं है। इसके लिए अजगर कर्नेल के सभी इतिहास को सहेजना होगा। नोटबुक लोड करने के बाद, और एक कर्नेल से कनेक्ट होने के बाद, यह जानकारी लोड की जानी चाहिए।

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