jupyter not defterinde hücreyi daralt


143

İpython Jupyter defter kullanıyorum. Ekranımda çok yer kaplayan bir işlev tanımladığımı varsayalım. Hücreyi daraltmanın bir yolu var mı?

İşlevin yürütülmesini ve çağrılabilir kalmasını istiyorum, ancak dizüstü bilgisayarı daha iyi görselleştirmek için hücreyi gizlemek / daraltmak istiyorum. Bunu nasıl yapabilirim?


30
Vay canına, zaten 2017 ve basit bir çözüm yok
user1700890

31
2019 ve hala sayılıyor
Hardian Lawi

23
2020 ... (ilk!)
itzy

5
Ah, bir hatırlatma koyacağım, böylece 2021'de ilk olabilirim
acemi

6
JupyterLab'da 2019'dan beri var. Bir hücreyi vurgulayın ve yanındaki mavi çubuğa tıklayın. Şimdi üç nokta olarak görüldüğünü göreceksiniz. Daha sonra veya başka bir yerde kaydettiğinizde ve yeniden açtığınızda saygı duyulur. View> Gibi diğer özellikler ve seçenekler var, buraya ve bağlantıyaCollapse All Code bakın .
Wayne

Yanıtlar:


94

jupyter contrib nbextensionsPython paketi notebook içinde etkinleştirilebilir bir kod-katlama uzantısı içerir. Belgeler için bağlantıyı (Github) takip edin.

Komut satırını kullanarak yüklemek için:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

Onları yönetmede hayatı kolaylaştırmak için jupyter nbextensions configuratorpaketi de tavsiye ederim . Bu, Notebook arayüzünüzde yüklü tüm uzantıları kolayca (de) etkinleştirebileceğiniz ek bir sekme sağlar.

Kurulum:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

11
Serin şeyler, "Kod katlama" nbextension sadece kod blokları değil, tüm hücreleri katlamak isterdim.
bsmith89

2
Eğer Conda ile yükleme sorunları içine herkes çalışır deneyin: pip install jupyter_contrib_nbextensionso zaman jupyter contrib nbextensions install --sys-prefix --skip-running-check. Keşke jupyter varsayılan olarak bu paketi olurdu.
user1700890

7
En basit yükleme yoludur Conda kendisi aracılığıyla : conda install -c conda-forge jupyter_contrib_nbextensions.
Max Ghenis

3
Yeni JupyterLab kullanan herkes için hızlı bir not. Bahsedilen GitHub sitesine göre, bu uzantılar JupyterLab'da çalışır. Bunu kendim merak ettim, bu yüzden başkalarına haber vereceğimi düşündüm. GitHub repo alıntı: Due to major differences between the Jupyter Notebook and JupyterLab, the extensions in this repository will not work in JupyterLab.
NYCeyes

2
Hücrenin üstüne bir #comment koyarsanız, tüm hücreyi daraltabilirsiniz. Jupyter daha sonra tüm hücreyi daraltacak bir açılır ok sağlar.
EatSleepCode

29

JupyterLab hücre çökmesini destekler. Soldaki mavi hücre çubuğunu tıklamak hücreyi katlar. resim açıklamasını buraya girin


6
yine de ihracatta devam etmiyor
cosmosa

Bunun için iyi bir çözüm var mı? Dışa aktardığımda çöken hücreleri gizlemek istiyorum. Ben bazı kod ve bazı çıkış tutmak ve diğer bazı kod ve çıkış gizlemek istiyorum, bu yüzden sadece tüm kodu gizlemek değil .....
Russell Richie

2
Kod ve çıktı bu cevapta açıklandığı gibi daraltılabilir. Ayrıca, bilgi kalıcıdır. Hücrenin meta verilerinde yazılır. source_hiddenve outputs_hiddenayarlandı. nbformat.readthedocs.io/en/latest/…
gillesB

27

Bir hücre oluşturabilir ve içine aşağıdaki kodu koyabilirsiniz:

%%html
<style>
div.input {
    display:none;
}
</style>

Bu hücrenin çalıştırılması tüm giriş hücrelerini gizleyecektir. Onları geri göstermek için, tüm çıktıları silmek üzere menüyü kullanabilirsiniz.

Aksi takdirde aşağıdaki gibi dizüstü bilgisayar uzantılarını deneyebilirsiniz:

https://github.com/ipython-contrib/IPython-notebook-extensions/wiki/Home_3x


Dizüstü bilgisayar uzantıları gerçekten iyi. Bir sürü başka şey daha var. github.com/ipython-contrib/jupyter_contrib_nbextensions
shahensha

16

Benzer bir sorun vardı ve @Energya tarafından işaret "nbextensions" çok iyi ve zahmetsizce çalıştı. Dizüstü bilgisayar uzantıları ve yapılandırıcıları için kurulum talimatları doğrudan (Windows'ta anaconda ile denedim) .

Bununla birlikte, aşağıdaki uzantıların ilgi çekmesi gerektiğini eklemek istiyorum.

  • Girişi Gizle | Bu uzantı, bir not defterinde ayrı bir kod çözücünün gizlenmesini sağlar. Bu, araç çubuğu düğmesine tıklayarak elde edilebilir: Girişi Gizle

  • Katlanabilir Başlıklar | Dizüstü bilgisayarın başlıklarla ayrılmış, daraltılabilir bölümleri olmasına izin verir Katlanabilir Başlıklar

  • Kodlama | Bundan bahsedildi ama tamlık için ekliyorum CodeFolding


9

~ / .Jupyter / custom / içinde aşağıdaki içeriklerle custom.js dosyası oluşturun:

$("<style type='text/css'> .cell.code_cell.collapse { max-height:30px; overflow:hidden;} </style>").appendTo("head");
$('.prompt.input_prompt').on('click', function(event) {
    console.log("CLICKED", arguments)   
    var c = $(event.target.closest('.cell.code_cell'))
    if(c.hasClass('collapse')) {
        c.removeClass('collapse');
    } else {
        c.addClass('collapse');
    }
});

Kaydettikten sonra sunucuyu yeniden başlatın ve dizüstü bilgisayarı yenileyin. Giriş etiketine tıklayarak herhangi bir hücreyi daraltabilirsiniz (In []).


3
Özel js yürütüldüğünde değiştirilecek div yüklenmediğinden bu benim için çalışmadı. Ancak, bu setTimeout (function () {...}, 3000) içindeki her şeyi sararak düzeltilebilir;
Steohan

2
Bu, 4. satırı var c = $(event.target).closest('.cell.code_cell') şu şekilde değiştirdikten sonra benim için çalıştı: ve Steohan'ın setTimeout'taki her şeyi sarma önerisini izleyerek.
proteome

Sadece c.toggleClass ('collapse') kullanabilirsiniz; if-else deyimi yerine.
gouravkr


9

İlk olarak, Energya'nın talimatlarını izleyin:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

İkincisi anahtar: Jüpiter not defterini açtıktan sonra Nbextension sekmesine tıklayın. Şimdi Nbextension (web tarayıcısı tarafından değil) tarafından sağlanan arama aracından "kolaj" olarak arama yapın , ardından "Daraltılabilir Başlıklar" adı verilen bir şey bulacaksınız

Senin istediğin bu!


2

Diğerlerinin de belirttiği gibi, bunu nbextensions üzerinden yapabilirsiniz. Hızlı ve kolay olan yaptığımın kısa bir açıklamasını vermek istedim:

Etiketlenebilir başlıkları etkinleştirmek için: Terminalinizde, önce şunu girerek Jupyter Dizüstü Bilgisayar Uzantılarını etkinleştirin / yükleyin:

pip install jupyter_contrib_nbextensions

Ardından şunu girin:

jupyter contrib nbextension install

Jupyter Notebook'u tekrar açın. "Düzenle" sekmesine gidin ve "nbextensions config" i seçin. Doğrudan "Yapılandırılabilir nbextensions" başlığı altındaki kutunun işaretini kaldırın, ardından "daraltılabilir başlıklar" ı seçin.


Birinin neden nbextensions configdoğrudan ana kontrol panelinden erişemediğini ve bunun yerine bir not defteri açması gerektiğini merak ediyorum . Alternatif olarak, diğerlerinin de belirttiği gibi, birisine localhost:8888/nbextensions(veya yapılandırmanızda hangi port varsa) erişebilirsiniz
Antoine

2

Kod sorma, başlıklar ile katlama vb. Gibi birçok uzantının (diğerlerinden daha fazla) tatmin edici olmadığını düşündüğüm bu soruya birçok cevap var. Hiçbiri basit ve etkili bir şekilde istediğimi yapmıyor. Kelimenin tam anlamıyla bir çözümün (Jupyter Lab için olduğu gibi) uygulanmadığına şaşırıyorum.

Aslında, o kadar memnun kaldım ki, bir dizüstü bilgisayar hücresindeki kodu çalıştırılabilir tutarken genişletebilen / daraltabilecek çok basit bir dizüstü bilgisayar uzantısı geliştirdim .

GitHub deposu: https://github.com/BenedictWilkinsAI/cellfolding

Aşağıda, uzantının ne yaptığına ilişkin küçük bir demo yer almaktadır:

Kod hücresinin soluna çift tıklandığında hücre tek bir satıra daraltılır:

Tekrar çift tıklandığında hücre genişletilir.

Uzatma pip ile kolayca monte edilebilir:

pip install nbextension-cellfolding
jupyter nbextension install --py cellfolding --user
jupyter nbextension enable --py cellfolding --user 

ve ayrıca nbextension yapılandırıcısı ile uyumludur . Umarım insanlar bunu faydalı bulur!


2
Bir cazibe gibi çalıştı. Temiz
Ayan Mitra

1

Ayrıca Pan Yan önerisinin geliştirilmiş bir sürümü var. Kod hücrelerini geri gösteren düğmeyi ekler:

%%html
<style id=hide>div.input{display:none;}</style>
<button type="button" 
onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">
Show inputs</button>

Veya python:

# Run me to hide code cells

from IPython.core.display import display, HTML
display(HTML(r"""<style id=hide>div.input{display:none;}</style><button type="button"onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">Show inputs</button>"""))

2
Kodlar, belirli bir hücreyi değil TÜM giriş hücresini gizler.
Jack Fleeting

Sadece çıktı için istediğim, ama Jupyter menüsünde geçiş yaparak tüm çıktıyı daraltabilirsiniz / gizleyebilirsiniz: Hücre> Tüm Çıktı> Geçiş
işaretleme

Yazık, bu kodu varsayılan olarak gizler ve sadece tıklamada gösteren bulduğum tek çözüm. Ne yazık ki, bu sadece bir hedef hücre değil tüm hücreleri gizler.
penelope

@penelope, farklı hücrelerin farklı html öğeleri kimliklerine veya benzersiz sınıflara sahip olup olmadığını kontrol edebilirsiniz. Cevabınız evet ise cevabımı buna göre değiştirebilirsiniz. Cevabım tüm hücreleri etkiliyor çünkü hücreler arasında ayrım yapmıyor.
Peter Zagubisalo

1

Uzantıları etkinleştirmek dışında fazla bir şey yapmanız gerekmez:

http://localhost:8888/nbextensions?nbextension=collapsible_headings
http://localhost:8888/nbextensions?nbextension=codefolding/main

resim açıklamasını buraya girin

En olası tüm uzantılarınızı burada bulabilirsiniz:

http://localhost:8888/nbextensions

resim açıklamasını buraya girin


1

İstediğim sonucu elde etmek için kullandığım şey:

  1. Aşağıdaki kod bloğunu toggle_cell.pynot defterinizle aynı dizinde bulunan bir dosyaya kaydedin
from IPython.core.display import display, HTML
toggle_code_str = '''
<form action="javascript:code_toggle()"><input type="submit" id="toggleButton" value="Show Sloution"></form>
'''

toggle_code_prepare_str = '''
    <script>
    function code_toggle() {
        if ($('div.cell.code_cell.rendered.selected div.input').css('display')!='none'){
            $('div.cell.code_cell.rendered.selected div.input').hide();
        } else {
            $('div.cell.code_cell.rendered.selected div.input').show();
        }
    }
    </script>

'''

display(HTML(toggle_code_prepare_str + toggle_code_str))

def hide_sloution():
    display(HTML(toggle_code_str))
  1. Dizüstü bilgisayarınızın ilk hücresine aşağıdakileri ekleyin
from toggle_cell import toggle_code as hide_sloution
  1. Aramak için seçim düğmesini eklemeniz gereken herhangi bir hücre hide_sloution()
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.