쿼카러버의 기술 블로그
[Jupyter Notebook & Git] Git에 커밋할 때 자동으로 Jupyter Notebook의 output을 지우는 법 (how to clear jupyter notebook outputs) 본문
[Jupyter Notebook & Git] Git에 커밋할 때 자동으로 Jupyter Notebook의 output을 지우는 법 (how to clear jupyter notebook outputs)
quokkalover 2022. 2. 5. 17:57
Jupyter Notebook과 Git을 함께 사용하는 경우에는, 코드의 버저닝이 매우 까다롭다.
코드를 제외한 output부분 까지 계속 diff에서 체크가 되기 때문이다.
이는 Notebook파일이 JSON Format으로 데이터를 저장하기 때문이고, cell안에 들어가는 데이터가 코드인지, output인지에 대한 구분을 컴퓨터가 자동으로 해주지 않는다.
그렇다고 매번 작업이 끝날 때마다 output을 지우자니 너무 귀찮다. 프로그래머라면 이를 자동화하고 싶은 욕심이 생길 것이다.
이는 git filter
와 nbstripout
을 활용해서 해결할 수 있다.
- git filter
는 working directory에서 git으로 파일이 업데이트 될 때 해당파일을 처리해준다. (clean filter나 smudge filter 등). 본 글에서는 clean filter를 사용할 예정이다.
- nbstripout
는 .ipynb파일의 output을 지워주는 기능을 제공한다.
자 이제 설치부터 해보자.
conda를 쓰는 경우
conda install -c conda-forge nbstripout
conda환경을 쓸 때는 내가 쓰는 환경에 위가 설치돼있어야 사용할 수 있다.
pip를 쓰는 경우
pip install --upgrade nbstripout
이렇게 nbstripout을 설치하고나면, 이제 add하거나 diff를 처리할 때, git이 자동으로 output을 지워주도록 해야 한다.
어떻게? 매우 쉽게도 Shell에서 nbstripout에서 제공해주는 아래 커맨드를 실행하면된다.
nbstripout --install --attributes .gitattributes
그냥 이 커맨드만 한번 실행시켜주면, 앞으로는 git add를 통해 notebook파일을 수정할 때마다, code나 markdown shell들만 staging area에 add될 것이다.
아래 레포를 참고하자 (star 눌러주면 감사..)
https://github.com/getveryrichet/nbstripout_repo
참고자료
https://stackoverflow.com/questions/18734739/using-ipython-jupyter-notebooks-under-version-control/20844506#20844506
http://mateos.io/blog/jupyter-notebook-in-git/
https://medium.com/somosfit/version-control-on-jupyter-notebooks-6b67a0cf12a3
'[Python]' 카테고리의 다른 글
[python] 모듈, 패키지, 라이브러리, 프레임워크 차이 (6) | 2022.05.08 |
---|---|
[Python advanced] itertools.groupby() 쉬운 설명 및 다양한 예제 (0) | 2022.02.28 |
[Python Advanced] lambda 함수란? (쉬운 설명 & 다양한 예시)(map, filter, reduce) (0) | 2022.02.05 |
[Python Advanced] reduce 함수란? (쉬운 설명 & 다양한 예시) (0) | 2022.02.05 |
[Python Advanced] filter 함수란? (쉬운 설명 & 다양한 예시) (0) | 2022.02.05 |