개발하자

리눅스 터미널에서 모든 셀에서 주피터 노트북의 출력을 지우는 방법은 무엇입니까?

Cuire 2023. 6. 19. 11:16
반응형

리눅스 터미널에서 모든 셀에서 주피터 노트북의 출력을 지우는 방법은 무엇입니까?

노트북의 출력이 너무 길어서 노트북에 저장되면 문제가 발생합니다. 이 노트북을 다시 열고 싶을 때마다 브라우저가 충돌하여 올바르게 표시되지 않습니다.

이 문제를 해결하려면 텍스트 편집기로 열고 문제의 원인이 되는 셀의 모든 출력을 삭제해야 합니다.

노트북의 출력물을 모두 청소해서 문제없이 다시 열 수 있는 방법이 있는지 궁금하다. 특정 출력을 삭제하는 것이 더 번거로울 것 같아서 모든 출력을 삭제하고 싶습니다.




nbconvert 6.0이 해결되어야 합니다

이 옵션은 이전에 오랫동안 손상되어 있었는데, 버그 보고서와 병합된 패치가 있습니다:

인플레이스 작업에 사용해야 합니다:

jupyter nbconvert --clear-output --inplace my_notebook.ipynb

또는 다음 파일에 저장합니다:

jupyter nbconvert --clear-output \
  --to notebook --output=my_notebook_no_out my_notebook.ipynb

이것이 나의 주의를 끌었다.

nb 변환 6.0 이전:

다음과 같은 용도:

jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace my_notebook.ipynb
jupyter nbconvert --ClearOutputPreprocessor.enabled=True \
  --to notebook --output=my_notebook_no_out my_notebook.ipynb

Jupyter 4.4.0, 노트북 == 5.7.6에서 테스트했습니다.




사용 및

다음 명령을 따릅니다:

jupyter nbconvert --ClearOutputPreprocessor.enabled=True --clear-output *.ipynb




노트북 출력을 지울 뿐만 아니라 코드도 지울 수 있습니다.

설치자

달려가다




를 생성하는 경우 특정 파일을 git에 추가하기 전에 필터를 실행할 수 있습니다. 이렇게 하면 디스크의 원래 파일은 그대로 유지되지만 "치료된" 버전은 커밋됩니다.

이 기능을 사용하려면 로컬 또는 글로벌에 다음을 추가하십시오:

[filter "strip-notebook-output"]
    clean = "jupyter nbconvert --ClearOutputPreprocessor.enabled=True --to=notebook --stdin --stdout --log-level=ERROR"

그런 다음 다음 내용이 포함된 노트북으로 디렉터리에 파일을 만듭니다:

*.ipynb filter=strip-notebook-output

작동 방식:

  • 속성은 각 노트북 파일을 인덱스(스테이지)에 추가하기 전에 각 노트북 파일에 대해 필터 작업을 실행하도록 git에 알려줍니다.
  • 필터는 우리의 친구이고, stdin에서 읽도록 설정되어 있고, stdout으로 쓰고, 출력물을 벗겨내고, 중요한 말이 있을 때만 말한다.
  • 인덱스에서 파일을 추출하면 필터의 작업이 실행되지만 지정하지 않았기 때문에 이 작업은 수행되지 않습니다. 여기서 노트북을 실행하여 출력()을 다시 생성할 수 있습니다.
  • 필터가 실패하면 파일이 변환되지 않고 스테이징됩니다.

이 과정에 대한 나의 유일한 불만은 내가 약속할 수는 있지만 동료들에게 그들의 것을 업데이트하라고 말해야 한다는 것이다.

만약 당신이 더 해킹하지만 훨씬 더 빠른 버전을 원한다면, 시도해 보세요:

  clean = "jq '.cells[].outputs = [] | .cells[].execution_count = null | .'"



@dirkjot에서 응답을 확장하여 구성 공유와 관련된 문제를 해결하려면:

.git/config를 수정하는 대신 로컬 .gitconfig 파일을 생성합니다. 이렇게 하면 다른 컴퓨터에서 실행해야 하는 명령이 조금 더 단순해집니다. 다음 명령을 실행하는 스크립트를 생성할 수도 있습니다:

git config --local include.경로 ../.gitconfig

또한 치료가 실행 중인지 확인하기 위해 로그 수준을 INFO로 변경했습니다.

repo/.gitconfig

[filter "strip-notebook-output"]
    clean = "jupyter nbconvert --ClearOutputPreprocessor.enabled=True --to=notebook --stdin --stdout --log-level=INFO"

repo/.git 속성

*.ipynb filter=strip-notebook-output

repo/git_configure.쉬

git config --local include.path ../.gitconfig

사용자는 다음을 실행하기만 하면 됩니다:

$ chmod u+x git_configure.sh
$ ./git_configure.sh



일부 하위 배열을 지우고 일부 실행 번호를 재설정하는 단순한 작업에는 고통스러울 정도로 느립니다. 노트북 소스 코드 형식에 변화가 있을 경우 해당 도구가 업데이트될 것으로 예상되기 때문에 유지보수성 측면에서 우수한 솔루션입니다. 그러나 아래의 대체 솔루션은 더 빠르고 nbconvert 6.0이 없는 경우에도 유용할 수 있습니다(현재 5.6.1을 실행 중인 환경이 있습니다...)

매우 간단한 스크립트는 트릭을 매우 빠르게 수행합니다:

jq 'reduce path(.cells[]|select(.cell_type == "code")) as $cell (.; setpath($cell + ["outputs"]; []) | setpath($cell + ["execution_count"]; null))' notebook.ipynb > out-notebook.ipynb

매우 간단하게 코드 셀을 식별하고 및 및 속성을 각각 및 및로 대체합니다.


또는 출력을 제거하고 실행 번호만 유지하려는 경우에는 훨씬 더 간단하게 수행할 수 있습니다:

jq 'del(.cells[]|select(.cell_type == "code").outputs[])' notebook.ipynb > out-notebook.ipynb



나한테 잘 먹혔지.

주피터 터미널을 열고 노트북이 들어 있는 폴더로 이동한 다음 다음 줄을 실행합니다:

nbstripout my_notebook.ipynb




앞의 답변 중 하나에서 언급했듯이 명령줄 json 프로세서를 사용하여 이 작업을 보다 빠르게 수행할 수 있습니다. 메타데이터, 출력 및 실행 횟수를 제거하기 위한 전체 명령은 다음에서 확인할 수 있습니다:

jq --indent 1 \
    '
    (.cells[] | select(has("outputs")) | .outputs) = []
    | (.cells[] | select(has("execution_count")) | .execution_count) = null
    | .metadata = {"language_info": {"name":"python", "pygments_lexer": "ipython3"}}
    | .cells[].metadata = {}
    ' 01-parsing.ipynb

원하는 경우 실행 횟수(json에서 반복적으로 발생하는 경우)와 같은 출력의 특정 부분만 치료하도록 수정한 다음 이를 Git 필터로 추가할 수 있습니다:

[filter "nbstrip"]
    clean = jq --indent 1 '(.. |."execution_count"? | select(. != null)) = null'
    smudge = cat

그리고 다음을 추가하여 필터를 모든 로컬 리포지토리에 전체적으로 적용합니다:

*.ipynb filter=nbstripout

이런 목적으로 만들어진 것도 있지만, 조금 더 느립니다.




다음과 같은 방법을 사용하여 접근하는 것이 좋습니다:

  - repo: local
    hooks:
      - id: jupyter-nb-clear-output
        name: jupyter-nb-clear-output
        files: \.ipynb$
        stages: [commit]
        language: python
        entry: jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace
        additional_dependencies: ['jupyterlab']

또한 에 자세히 설명되어 있습니다.




json 구문 분석:

#LARGE Notebook Clean Make a Copy FIRST and Run this only on the COPY!!!!

import json 
filename = 'COPY_of_Huge_Notebook.ipynb' 
f = open(filename) 
large_ntbk = json.load(f) 
f.close() 
outputs = large_ntbk['cells'] 
for o in outputs:
    if 'outputs' in o:
        outputs['outputs'] = []

small = open('small.ipynb', 'w') 
json.dump(large_ntbk, small, indent = 2) 
small.close()

반응형