Jupyter 노트북에서 셀 축소


143

ipython Jupyter 노트북을 사용하고 있습니다. 화면에서 많은 공간을 차지하는 함수를 정의했다고 가정 해 봅시다. 셀을 접는 방법이 있습니까?

함수를 실행하고 호출 가능하게 유지하고 싶지만 노트북을 더 잘 시각화하기 위해 셀을 숨기거나 접고 싶습니다. 어떻게해야합니까?


30
와우, 그것은 이미 2017 년이고 간단한 해결책은 없습니다
user1700890

31
2019 년과 계속 계산
Hardian Lawi

23
2020 년 ... (처음!)
itzy

5
아, 내가 2021 년에 처음이 될 수 있도록 미리 알림을하겠습니다
초보자

6
JupyterLab은 2019 년부터이 기능을 제공합니다. 셀을 강조 표시 한 다음 옆에있는 파란색 막대를 클릭하십시오. 이제 세 개의 점으로 표시됩니다. 나중에 또는 다른 곳에서 저장하고 다시 열 때 존중됩니다. View> 와 같은 추가 기능 및 옵션이 있습니다 . 여기여기 링크를Collapse All Code 참조 하십시오 .
웨인

답변:


94

jupyter contrib nbextensions파이썬 패키지는 노트북에서 사용할 수있는 코드 접는 확장이 포함되어 있습니다. 설명서를 보려면 링크 (Github)를 따르십시오.

명령 행을 사용하여 설치하려면 다음을 수행하십시오.

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

더 쉽게 관리 할 수 ​​있도록 jupyter nbextensions configurator패키지 도 권장합니다 . 이것은 설치된 모든 확장을 쉽게 (비활성화) 할 수있는 노트북 인터페이스의 추가 탭을 제공합니다.

설치:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

11
"Codefolding"nbextension이 코드 블록뿐만 아니라 전체 셀을 접을 수 있기를 바랍니다.
bsmith89

2
누군가 conda와 관련된 설치 문제가 발생하면 pip install jupyter_contrib_nbextensions다음을 시도하십시오 jupyter contrib nbextensions install --sys-prefix --skip-running-check. jupyter가 기본적 으로이 패키지를 갖기를 바랍니다.
user1700890

7
간단한 설치 경로는 CONDA 자체를 통해 : conda install -c conda-forge jupyter_contrib_nbextensions.
Max Ghenis

3
최신 JupyterLab을 사용하는 사람에게는 간단한 참고 사항입니다. 언급 된 GitHub 사이트에 따르면 이러한 확장은 JupyterLab에서 작동합니다. 나는 이것을 나 자신이 궁금해해서 다른 사람들에게 알리겠다고 생각했다. GitHub 리포지토리 인용 : Due to major differences between the Jupyter Notebook and JupyterLab, the extensions in this repository will not work in JupyterLab.
NYCeyes

2
셀 맨 위에 #comment를 넣으면 전체 셀을 축소 할 수 있습니다. Jupyter는 전체 셀을 축소하는 드롭 다운 화살표를 제공합니다.
EatSleepCode

28

JupyterLab 은 세포 붕괴를 지원합니다. 왼쪽의 파란색 셀 막대를 클릭하면 셀이 접 힙니다. 여기에 이미지 설명을 입력하십시오


6
그래도 수출에서 지속되지 않습니다
cosmosa

이것에 대한 좋은 해결책이 있습니까? 내보낼 때 축소 된 셀을 숨기고 싶었습니다. 코드와 출력을 유지하고 다른 코드와 출력을 숨기고 싶기 때문에 모든 코드를 숨길 수는 없습니다 .....
Russell Richie

2
이 답변에 설명 된대로 코드와 출력을 축소 할 수 있습니다. 또한 정보가 유지됩니다. 셀의 메타 데이터로 작성됩니다. source_hiddenoutputs_hidden설정됩니다. nbformat.readthedocs.io/en/latest/…
gillesB

27

셀을 작성하고 다음 코드를 넣을 수 있습니다.

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

이 셀을 실행하면 모든 입력 셀이 숨겨집니다. 다시 표시하려면 메뉴를 사용하여 모든 출력을 지울 수 있습니다.

그렇지 않으면 아래와 같이 노트북 확장을 시도 할 수 있습니다.

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


노트북 확장은 정말 좋습니다. 다른 것들도 많이 있습니다. github.com/ipython-contrib/jupyter_contrib_nbextensions
shahensha

16

나는 비슷한 문제를 겪었고 @Energya가 지적한 "nbextensions"는 매우 잘 노력했다. 노트북 확장 프로그램구성 프로그램에 대한 설치 지침은 간단합니다 (Windows에서는 anaconda로 시도했습니다) .

즉, 다음 확장이 관심을 가져야한다고 덧붙이고 싶습니다.

  • 입력 숨기기 | 이 확장을 통해 노트북에 개별 코드 셀을 숨길 수 있습니다. 툴바 버튼을 클릭하면됩니다 : 입력 숨기기

  • 접을 수있는 제목 | 노트북이 제목으로 구분 된 접을 수있는 섹션을 가질 수 있습니다. 접을 수있는 제목

  • 코드 폴딩 | 이것은 언급되었지만 완전성을 위해 추가합니다. 코드 폴딩


9

~ / .jupyter / custom / 안에 custom.js 파일을 다음 내용으로 작성하십시오.

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

저장 한 후 서버를 다시 시작하고 노트북을 새로 고치십시오. 입력 레이블 (In [])을 클릭하여 셀을 접을 수 있습니다.


3
사용자 정의 js가 실행될 때 변경 될 div 가로 드되지 않았기 때문에 이것은 작동하지 않았습니다. 그러나 이것은 모두 setTimeout (function () {...}, 3000)에 래핑되어 고정 될 수 있습니다.
Steohan

2
이것은 4 번째 줄을 var c = $(event.target).closest('.cell.code_cell') 다음으로 변경 한 후 setTimeout에서 모든 것을 래핑하라는 Steohan의 제안에 따라 저에게 효과적이었습니다.
proteome

c.toggleClass ( 'collapse');를 사용하면됩니다. if-else 문 대신.
gouravkr


9

먼저 Energya의 지시를 따르십시오.

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

두 번째는 핵심입니다. 목성 노트북을 연 후 Nbextension 탭을 클릭하십시오. 이제 Nbextension (웹 브라우저가 아님) 에서 제공하는 검색 도구에서 "colla"를 검색 하면 "Collapsible Headings"라는 것을 찾을 수 있습니다.

이것은 당신이 원하는 것입니다!


2

다른 사람들이 언급했듯이 nbextensions를 통해이 작업을 수행 할 수 있습니다. 나는 내가 한 일에 대한 간단한 설명을하고 싶었습니다.

접을 수있는 제목을 활성화하려면 : 터미널에서 다음을 먼저 입력하여 Jupyter Notebook Extensions를 활성화 / 설치하십시오.

pip install jupyter_contrib_nbextensions

그런 다음 다음을 입력하십시오.

jupyter contrib nbextension install

Jupyter Notebook을 다시 엽니 다. "편집"탭으로 이동하여 "nbextensions 구성"을 선택하십시오. "구성 가능한 nbextensions"제목 바로 아래에있는 확인란을 선택 취소 한 다음 "접을 수있는 제목"을 선택하십시오.


nbextensions config메인 대시 보드에서 직접 액세스 할 수없고 대신 노트북을 열어야하는 이유가 궁금 합니다. 또는 다른 사람들이 언급했듯이, localhost:8888/nbextensions(또는 구성에있는 포트 중 하나를 통해 )
Antoine

2

이 질문에 대한 많은 답변이 있습니다. 모든 것이 다른 사람들보다 만족스럽지 않다고 생각합니다 (코드 접기, 제목으로 접기 등). Jupyter Lab과 마찬가지로 솔루션이 구현되지 않았다는 사실에 놀랍습니다.

사실, 나는 매우 불만족 하여 노트북 셀 의 코드 를 확장 / 축소 하면서 실행 가능한 상태로 유지할 수있는 매우 간단한 노트북 확장을 개발 했습니다.

GitHub 리포지토리 : https://github.com/BenedictWilkinsAI/cellfolding

다음은 확장 기능의 작은 데모입니다.

코드 셀의 왼쪽을 두 번 클릭하면 한 줄로 축소됩니다.

다시 더블 클릭하면 셀이 확장됩니다.

pip를 사용하여 확장을 쉽게 설치할 수 있습니다.

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

nbextension configurator 와도 호환됩니다 . 사람들이이 정보를 유용하게 사용할 수 있기를 바랍니다.


2
매력처럼 일했다. 깔끔한
Ayan Mitra

1

Pan Yan 제안의 개선 된 버전도 있습니다. 코드 셀을 다시 표시하는 버튼을 추가합니다.

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

또는 파이썬 :

# 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
코드는 특정 셀이 아닌 모든 입력 셀을 숨 깁니다.
Jack Fleeting

출력을 원했지만 Jupyter 메뉴에서 모든 출력을 토글하여 축소 / 숨기기 할 수 있습니다 : 셀> 모든 출력> 토글
markling

수치심, 이것은 기본적으로 코드를 숨기고 클릭시에만 표시하는 유일한 솔루션입니다. 불행히도, 이것은 하나의 대상이 아닌 모든 세포를 숨 깁니다.
페넬로페

@penelope 당신은 다른 셀이 다른 HTML 요소 ID 또는 고유 클래스를 가지고 있는지 확인할 수 있습니다. 그렇다면 대답을 적절하게 수정할 수 있습니다. 내 대답은 셀을 구분하지 않기 때문에 모든 셀에 영향을 미칩니다.
Peter Zagubisalo

1

확장 기능을 활성화하는 것 외에는 많은 작업을 수행 할 필요가 없습니다.

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

여기에 이미지 설명을 입력하십시오

가장 가능성이 높은 것은 다음과 같습니다.

http://localhost:8888/nbextensions

여기에 이미지 설명을 입력하십시오


1

원하는 결과를 얻는 데 사용하는 것은 다음과 같습니다.

  1. 아래 코드 블록을 toggle_cell.py노트북과 동일한 디렉토리에 이름이 지정된 파일에 저장하십시오.
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. 노트북의 첫 번째 셀에 다음을 추가하십시오.
from toggle_cell import toggle_code as hide_sloution
  1. 간단히 전화하려면 토글 버튼을 추가 해야하는 모든 셀 hide_sloution()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.