ciutkan sel di notebook jupyter

156

Saya menggunakan notebook ipython Jupyter. Katakanlah saya mendefinisikan sebuah fungsi yang menempati banyak ruang di layar saya. Apakah ada cara untuk meruntuhkan sel?

Saya ingin fungsi tetap dijalankan dan dapat dipanggil, namun saya ingin menyembunyikan / menutup sel untuk memvisualisasikan notebook dengan lebih baik. Bagaimana saya bisa melakukan ini?

aloha
sumber
34
Wow, ini sudah 2017 dan tidak ada solusi sederhana
user1700890
34
2019 dan masih terus bertambah
Hardian Lawi
32
2020 ... (pertama!)
itzy
9
Ah, saya akan beri pengingat agar saya bisa menjadi yang pertama di tahun 2021
pemula
7
JupyterLab memiliki ini sejak 2019. Sorot sebuah sel dan kemudian klik pada bilah biru di sebelahnya. Anda akan melihatnya direpresentasikan sebagai tiga titik sekarang. Ini akan diterapkan saat Anda menyimpan dan membukanya kembali nanti atau di tempat lain. Ada fitur dan opsi lebih lanjut, seperti View> Collapse All Code, lihat di sini dan tautannya di sini .
Wayne

Jawaban:

103

The jupyter contrib nbextensionspaket Python berisi ekstensi kode-lipat yang dapat diaktifkan dalam notebook. Ikuti tautan (Github) untuk dokumentasi.

Untuk menginstal menggunakan baris perintah:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

Untuk membuat hidup lebih mudah dalam mengelolanya, saya juga merekomendasikan jupyter nbextensions configuratorpaketnya. Ini memberikan tab tambahan di antarmuka Notebook dari mana Anda dapat dengan mudah (de) mengaktifkan semua ekstensi yang diinstal.

Instalasi:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user
Energya
sumber
12
Hal yang keren, meskipun saya berharap ekstensi n "Codefolding" akan melipat seluruh sel, dan bukan hanya blok kode.
bsmith89
2
Jika ada yang mengalami masalah instalasi dengan conda coba: pip install jupyter_contrib_nbextensionslalu jupyter contrib nbextensions install --sys-prefix --skip-running-check. Saya berharap jupyter memiliki paket ini secara default.
pengguna1700890
7
Jalur instalasi yang paling sederhana adalah melalui conda sendiri : conda install -c conda-forge jupyter_contrib_nbextensions.
Max Ghenis
3
Hanya catatan singkat untuk siapa saja yang menggunakan JupyterLab yang lebih baru. Menurut situs GitHub yang disebutkan, ekstensi ini berfungsi di JupyterLab. Aku sendiri yang bertanya-tanya, jadi kupikir aku akan memberi tahu orang lain. Mengutip repo GitHub: Due to major differences between the Jupyter Notebook and JupyterLab, the extensions in this repository will not work in JupyterLab.
NYCeyes
3
Anda BISA menciutkan seluruh sel jika Anda meletakkan #comment di bagian atas sel. Jupyter kemudian memberikan panah drop-down yang akan menciutkan seluruh sel.
EatSleepCode
35

JupyterLab mendukung penciutan sel. Mengklik pada bilah sel biru di sebelah kiri akan melipat sel. masukkan deskripsi gambar di sini

intsco
sumber
6
tidak bertahan dalam mengekspor
cosmosa
Apakah ada solusi yang bagus untuk ini? Saya sangat ingin menyembunyikan sel yang runtuh saat saya mengekspor. Saya ingin menyimpan beberapa kode dan beberapa keluaran, dan menyembunyikan beberapa kode dan keluaran lainnya, jadi saya tidak bisa begitu saja menyembunyikan semua kode .....
Russell Richie
2
Kode dan keluaran dapat diciutkan seperti yang dijelaskan dalam jawaban ini. Selanjutnya informasi tersebut tetap ada. Itu tertulis dalam metadata sel. source_hiddendan outputs_hiddensudah diatur. nbformat.readthedocs.io/en/latest/…
gillesB
27

Anda dapat membuat sel dan memasukkan kode berikut ke dalamnya:

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

Menjalankan sel ini akan menyembunyikan semua sel input. Untuk menampilkannya kembali, Anda dapat menggunakan menu untuk menghapus semua output.

Jika tidak, Anda dapat mencoba ekstensi notebook seperti di bawah ini:

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

Pan Yan
sumber
Ekstensi notebook sangat bagus. Ada banyak hal lain juga. github.com/ipython-contrib/jupyter_contrib_nbextensions
shahensha
18

Saya memiliki masalah serupa dan "nbextensions" yang ditunjukkan oleh @Energya bekerja dengan sangat baik dan mudah. Petunjuk penginstalan langsung ke depan (saya mencoba dengan anaconda di Windows) untuk ekstensi notebook dan konfiguratornya .

Karena itu, saya ingin menambahkan bahwa ekstensi berikut harus menarik.

  • Sembunyikan Input | Ekstensi ini memungkinkan penyembunyian satu codecell di notebook. Ini dapat dilakukan dengan mengklik tombol toolbar: Sembunyikan Input

  • Judul yang Dapat Dilipat | Mengizinkan buku catatan memiliki bagian yang dapat diciutkan, dipisahkan oleh judul Judul yang Dapat Diciutkan

  • Codefolding | Ini telah disebutkan tetapi saya menambahkannya untuk kelengkapan Codefolding

Atul Singh Arora
sumber
10

Buat file custom.js di dalam ~ / .jupyter / custom / dengan konten berikut:

$("<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');
    }
});

Setelah menyimpan, restart server dan segarkan notebook. Anda dapat menutup sel mana pun dengan mengklik label input (Dalam []).

Sundar
sumber
3
Ini tidak berhasil bagi saya karena div yang akan diubah tidak dimuat, saat custom js dijalankan. Namun, ini bisa diperbaiki dengan membungkus semuanya di setTimeout (function () {...}, 3000);
Steohan
2
Ini berhasil bagi saya setelah mengubah baris ke-4 menjadi: var c = $(event.target).closest('.cell.code_cell') dan mengikuti saran Steohan untuk membungkus semuanya di setTimeout.
proteome
Anda cukup menggunakan c.toggleClass ('collapse'); alih-alih pernyataan if-else.
gouravkr
9

Ekstensi hide_code memungkinkan Anda untuk menyembunyikan sel individu, dan / atau petunjuk di sebelahnya. Pasang sebagai

pip3 install hide_code

Kunjungi https://github.com/kirbs-/hide_code/ untuk info lebih lanjut tentang ekstensi ini.

Linas
sumber
9

Pertama, ikuti instruksi Energya:

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

Kedua adalah kuncinya: Setelah membuka notebook jupiter, klik tab Nbextension. Sekarang Cari "colla" dari alat pencarian yang disediakan oleh Nbextension (bukan oleh web browser) , maka Anda akan menemukan sesuatu yang disebut "Collapsible Headings"

Ini yang kamu inginkan!

pengguna40780
sumber
4

Ada banyak jawaban untuk pertanyaan ini, yang semuanya saya rasa tidak memuaskan (beberapa lebih dari yang lain), dari banyak ekstensi - pelipatan kode, pelipatan judul, dll. Tidak ada yang melakukan apa yang saya inginkan dengan cara yang sederhana dan efektif. Saya benar-benar kagum bahwa solusi belum diterapkan (seperti yang terjadi pada Jupyter Lab).

Faktanya, saya sangat tidak puas karena saya telah mengembangkan ekstensi notebook yang sangat sederhana yang dapat memperluas / menciutkan kode di sel notebook, sekaligus menjaganya tetap dapat dieksekusi.

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

Di bawah ini adalah demo kecil tentang apa yang dilakukan ekstensi:

Cukup klik dua kali di kiri sel kode akan menciutkannya menjadi satu baris:

Mengklik dua kali lagi akan memperluas sel.

Ekstensi dapat dipasang dengan mudah dengan pip:

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

dan juga kompatibel dengan konfigurator nbextension . Saya berharap orang-orang akan merasakan manfaatnya!

BenedictWilkinsAI
sumber
2
Bekerja seperti pesona. Rapi
Ayan Mitra
3

Seperti yang disebutkan orang lain, Anda dapat melakukan ini melalui nbextensions. Saya ingin memberikan penjelasan singkat tentang apa yang saya lakukan, yang cepat dan mudah:

Untuk mengaktifkan judul yang dapat dilipat: Di terminal Anda, aktifkan / instal Ekstensi Notebook Jupyter dengan terlebih dahulu memasukkan:

pip install jupyter_contrib_nbextensions

Lalu, masukkan:

jupyter contrib nbextension install

Buka kembali Jupyter Notebook. Buka tab "Edit", dan pilih "nbextensions config". Hapus centang pada kotak tepat di bawah judul "Ekstensi n yang dapat dikonfigurasi", lalu pilih "judul yang dapat diciutkan".

Mame Gannon-Luiz
sumber
Bertanya-tanya mengapa seseorang tidak dapat mengakses nbextensions configlangsung dari dasbor utama dan harus membuka buku catatan sebagai gantinya. Atau, seperti yang disebutkan orang lain, seseorang dapat mengaksesnya melalui localhost:8888/nbextensions(atau port mana pun yang ada dalam konfigurasi Anda)
Antoine
Terima kasih! Ini sangat membantu. Saya bertanya-tanya bagaimana cara melanjutkan untuk jupyterlab
Mez13
1

Ada juga versi saran Pan Yan yang ditingkatkan. Ia menambahkan tombol yang menunjukkan sel kode kembali:

%%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>

Atau 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>"""))
Peter Zagubisalo
sumber
2
Kode menyembunyikan SEMUA sel input, bukan sel tertentu.
Jack Fleeting
Hanya apa yang saya inginkan untuk output, tetapi Anda dapat menutup / menyembunyikan semua output dengan mengaktifkannya di menu Jupyter: Sel> Semua Output> Toggle
menandai
Malu, ini adalah satu-satunya solusi yang saya temukan yang menyembunyikan kode secara default dan hanya menampilkannya saat diklik. Sayangnya, ini menyembunyikan semua sel dan bukan hanya satu target.
penelope
@penelope Anda dapat memeriksa apakah sel yang berbeda memiliki ID elemen html yang berbeda atau kelas yang unik. Jika ya maka Anda dapat mengubah jawaban saya yang sesuai. Jawaban saya memengaruhi semua sel karena tidak membedakan antar sel.
Peter Zagubisalo
1

Anda tidak perlu melakukan banyak hal kecuali mengaktifkan ekstensi:

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

masukkan deskripsi gambar di sini

Kemungkinan besar Anda akan menemukan semua ekstensi Anda di sini:

http://localhost:8888/nbextensions

masukkan deskripsi gambar di sini

prosti
sumber
1

Apa yang saya gunakan untuk mendapatkan hasil yang diinginkan adalah:

  1. Simpan blok kode di bawah ini dalam sebuah file bernama toggle_cell.pydi direktori yang sama dengan buku catatan Anda
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. Tambahkan yang berikut ini di sel pertama buku catatan Anda
from toggle_cell import toggle_code as hide_sloution
  1. Sel apa pun yang Anda butuhkan untuk menambahkan tombol sakelar untuk menelepon hide_sloution()
ِ Abdalrahman M. Amer
sumber