Jupyter (IPython) not defteri oturumu daha sonra nasıl toplanır veya saklanır


106

Diyelim ki Jupyter / Ipython not defterinde çok fazla zaman alan hesaplama yapılmış daha büyük bir veri analizi yapıyorum. Daha sonra, bazı nedenlerden dolayı, Jupyter yerel sunucusunu kapatmam gerekiyor, ancak tüm zaman alan hesaplamaları tekrar yapmak zorunda kalmadan analizi daha sonra yapmaya geri dönmek istiyorum.


Ben hangi gibi yapmak aşk olduğunu pickleveya tüm Jupyter oturumu depolamak (bütün panda dataframes, np.arrays, değişkenler, ...) güvenle ben tam olarak aynı durumda benim oturumuna dönebilirsiniz bilerek sunucuyu kapatabilirsiniz böylece önce.

Teknik olarak mümkün mü? Göz ardı ettiğim yerleşik bir işlev var mı?


DÜZENLEME: dayanarak bu cevabın bir var %store sihirli "hafif turşu" olmalıdır. Ancak değişkenleri şu şekilde manuel olarak saklamanız gerekir:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
görüşme kapatılıyor,
%store -r foo yenileme için çekirdek # r yeniden başlatılıyor
print(foo) # "A dummy string"

bu benim istediğim şeye oldukça yakın, ancak bunu elle yapmak zorunda kalmak ve farklı oturumlar arasında ayrım yapamamak onu daha az kullanışlı hale getiriyor.


1
Bu konuda ilerleme var mı? Yalnızca Spyder IDE'de değişkenleri * .mat'a kaydedebilen bir çalışma alanı olduğunu fark ettim. Ancak bunun Jupyter Notebook'a aktarılıp aktarılamayacağından emin değilim.
cqcn1991

Eğer kabul mü pypi.python.org/pypi/dill ? "dereotu da yeteneği sağlamaktadır: - kaydetme ve yük piton tercüman oturumları" İşte bu piton, olmasa başka emin neyi ipython veya çekirdek ile ilgilenmektedir
piccolbo

Yanıtlar:


69

Sanırım Dill sorunuzu iyi cevapladı.

pip install dill

Bir Defter oturumunu kaydedin:

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

Bir Defter oturumunu geri yükleme:

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

Kaynak


2
jeneratörler olduğunda başarısız oluyor (bunu düşündüğümde bu anlam ifade ediyor), ancak bu umduğumuz kadar yakın görünüyor!
Robin Nemeth

2
Benim için harika çalıştı. Unutulmaması gereken birkaç nokta: Öncelikle, etrafta asılı pyodbc bağlantı nesneleriniz varsa, bunları kapatmanız ve ardından hepsini Yok olarak ayarlamanız gerekir, aksi takdirde "TypeError: pyodbc. bağlantı nesnelerini toplayamaz" hatası alırsınız. . İkinci olarak, not defteri durumu kodunuz tarafından oluşturulan grafikleri içermez, bu nedenle bunları geri getirmek için hücreleri yeniden çalıştırmanız gerekir.
Michael Szczepaniak

Ama işe yaramıyor Kaydedilen dosyayı başka bir makinede kullandım
Jaya A

Yüklü dereotu. Komut satırından dill dump_session ('notebook_env.db') içe aktarıyor muyum?
cheznead

1
Hayır, Jupyter not defterini çalıştırırken yapmanız gerekecek. Hem dump_session hem de load_session not defterinden olmalıdır. Load_session'ınız not defterinin başında olabilir. Ve dump_session not defterinin en sonunda olabilir.
MetalloyD

29

(Bunu gerçek bir cevap olarak sunmaktansa yorum yapmayı tercih ederim, ancak yorum yapmak için daha fazla itibara ihtiyacım var.)

Çoğu veri benzeri değişkeni sistematik bir şekilde depolayabilirsiniz. Genelde yaptığım şey tüm veri çerçevelerini, dizileri vb. Pandas.HDFStore'da depolamaktır . Defterin başında beyan edin

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

ve sonra yeni değişkenleri üretirken saklayın

backup['var1'] = var1

Sonunda, muhtemelen yapılacak iyi bir fikir

backup.close()

sunucuyu kapatmadan önce. Defterle bir dahaki sefere devam etmek istediğinizde:

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

Doğrusu, ipython not defterinde yerleşik işlevselliği de tercih ederim. Her şeyi bu şekilde kaydedemezsiniz (örneğin nesneler, bağlantılar) ve dizüstü bilgisayarı bu kadar çok standart kodla düzenli tutmak zordur.


6
Bu çok ilginç bir çözüm, ancak tam anlamıyla böyle bir sistemi sürdürmenin getirdiği acıyı hissedebiliyorum. Teşekkürler tho :)
Robin Nemeth

19

Bu soru şununla ilgilidir: IPython Not Defterinde nasıl önbelleğe alınır?

Tek tek hücrelerin sonuçlarını kaydetmek için, önbelleğe alma büyüsü işe yarar.

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

Dizüstü bilgisayarı yeniden çalıştırırken, bu hücrenin içeriği önbellekten yüklenir.

Bu tam olarak sorunuzu yanıtlamıyor, ancak tüm uzun hesaplamaların sonuçlarının hızlı bir şekilde geri kazanılması için yeterli olabilir. Bu, dizüstü bilgisayarın üst kısmındaki tümünü çalıştır düğmesine basmanın birleşimiyle benim için uygulanabilir bir çözüm.

Önbellek büyüsü henüz bütün bir dizüstü bilgisayarın durumunu kurtaramaz . Bildiğim kadarıyla henüz bir "dizüstü bilgisayarı" devam ettirecek başka bir sistem yok. Bu, python çekirdeğinin tüm geçmişini kaydetmeyi gerektirir. Dizüstü bilgisayarı yükledikten ve bir çekirdeğe bağlandıktan sonra bu bilgiler yüklenmelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.