IPython 노트북을 버전 관리 상태로 유지하는 좋은 전략은 무엇입니까 ?
노트북 형식은 버전 제어에 적합합니다. 노트북과 출력을 버전 제어하려는 경우 이것은 잘 작동합니다. 성가심은 특히 영화와 음모에 큰 이진 얼룩이 될 수있는 셀 출력 (일명 "빌드 제품")을 제외하고 입력을 버전 제어 만하고 싶을 때 발생합니다. 특히, 나는 다음과 같은 좋은 워크 플로우를 찾으려고 노력하고 있습니다.
- 출력 포함 또는 제외 중에서 선택할 수 있습니다.
- 원하지 않는 경우 실수로 출력을 커밋하지 못하게합니다.
- 로컬 버전으로 출력을 유지할 수 있습니다.
- 내 버전 제어 시스템을 사용하여 입력의 변경 사항을 확인할 수 있습니다 (즉, 입력을 버전 제어 만하지 만 로컬 파일에 출력이있는 경우 입력이 변경되었는지 확인하고 싶습니다 (커밋 필요) 버전 제어 상태 명령을 사용하면 로컬 파일에 출력이 있으므로 항상 차이를 등록합니다.)
- 업데이트 된 깨끗한 노트북에서 작업중인 노트북 (출력이 포함 된)을 업데이트 할 수 있습니다. (최신 정보)
언급했듯이 출력을 포함하기로 선택한 경우 ( 예 : nbviewer 를 사용할 때 바람직 함 ) 모든 것이 정상 입니다. 문제는 출력을 버전 제어하고 싶지 않을 때 입니다. 노트북의 출력을 제거하기위한 몇 가지 도구와 스크립트가 있지만 다음과 같은 문제가 자주 발생합니다.
- 실수로 출력이있는 버전을 커밋하여 저장소를 오염시킵니다.
- 버전 제어를 사용하기 위해 출력을 지우지 만 실제로 로컬 사본에 출력을 유지하려고합니다 (예를 들어 재생산하는 데 시간이 걸리는 경우가 있음).
- 출력을 제거하는 일부 스크립트는
Cell/All Output/Clear
메뉴 옵션 과 비교하여 형식을 약간 변경 하여 diff에 원하지 않는 노이즈를 만듭니다. 이것은 일부 답변으로 해결됩니다. - 깨끗한 버전의 파일로 변경 사항을 가져올 때 모든 것을 다시 실행하지 않고도 변경 사항을 작업 전자 필기장에 통합하는 방법을 찾아야합니다. (최신 정보)
아래에서 논의 할 몇 가지 옵션을 고려했지만 아직 포괄적 인 솔루션을 찾지 못했습니다. 전체 솔루션을 사용하려면 IPython을 약간 변경하거나 간단한 외부 스크립트를 사용해야합니다. 현재 mercurial을 사용 하고 있지만 git 과 함께 작동 하는 솔루션을 원합니다. 이상적인 솔루션은 버전 제어 불가지론입니다.
이 문제는 여러 번 논의되었지만 사용자 관점에서 결정적이거나 명확한 해결책은 없습니다. 이 질문에 대한 답은 결정적인 전략을 제공해야합니다. 최신 (심지어 개발 된) 버전의 IPython 또는 쉽게 설치되는 확장 기능이 필요한 경우에 좋습니다.
업데이트 : Gregory Crosswhite의 제안을 사용하여 모든 저장시 버전을 선택적으로 저장하는 수정 된 노트북 버전을 가지고 놀고 있습니다. 이것은 대부분의 제약 조건을 만족하지만 다음 사항은 해결되지 않습니다..clean
- 이것은 아직 표준 솔루션이 아닙니다 (ipython 소스를 수정해야합니다. 간단한 확장으로이 동작을 수행 할 수있는 방법이 있습니까? 일종의 저장 고리가 필요합니다.
- 현재 워크 플로에서 발생하는 문제는 변화를 가져 오는 것입니다. 이것들은
.clean
파일로 들어온 다음 어떻게 든 내 작업 버전에 통합되어야합니다. (물론, 항상 노트북을 다시 실행할 수는 있지만, 특히 일부 결과가 긴 계산, 병렬 계산 등에 의존하는 경우 고통 스러울 수 있습니다.) 아직이 문제를 해결하는 방법에 대한 좋은 아이디어가 없습니다. . 아마도 ipycache 와 같은 확장과 관련된 워크 플로우 는 작동 할 수 있지만 약간 복잡해 보입니다.
노트
출력 제거 (스트라이핑)
- 노트북이 실행 중이면
Cell/All Output/Clear
메뉴 옵션을 사용 하여 출력을 제거 할 수 있습니다 . - 출력을 제거하기위한 스크립트가 있습니다 (예 : 출력 을 제거하지만 노트북 인터페이스를 사용하는 것과 동일한 출력을 생성하지 않는 스크립트 nbstripout.py) . 이것은 결국 ipython / nbconvert 저장소에 포함되었지만 변경 사항이 이제 ipython / ipython에 포함되어 있음을 알리는 폐쇄 되었지만 해당 기능은 아직 포함되지 않은 것 같습니다. (갱신) 그 존재는 말했다 그레고리 Crosswhite의 솔루션 이, 심지어 호출하지 않고 아주 쉽게 할 수 있음을 보여줍니다 ipython / nbconvert은따라서이 접근 방식은 제대로 연결될 수 있으면 가능할 것입니다. 그러나 각 버전 제어 시스템에 연결하는 것은 좋은 생각처럼 보이지 않습니다 (어쨌든 노트북 메커니즘에 연결해야 함).
뉴스 그룹
이슈
- 977 : 노트북 기능 요청 (열기) .
- 1280 : 저장 옵션 모두 지우기 (열기) . ( 이 토론에 따른다 .)
- 3295 : 자동 내보내기 노트북 : 명시 적으로 표시된 셀만 내보내기 (닫힘) . 확장 프로그램으로 해결 11 쓰기 및 실행 매직 추가 (병합) .
풀 요청
- 1621 : "Clear All Output"에서 In [] 프롬프트 번호를 지 웁니다 (병합) . ( 2519 (병합) 도 참조하십시오 .)
- 1563 : clear_output 개선 (병합) .
- 3065 : 노트북의 확산 성 (닫힘) .
- 3291 : 저장할 때 출력 셀을 건너 뛰는 옵션을 추가하십시오. (닫힘) . 이것은 매우 관련이있는 것처럼 보이지만 "깨끗한 / 얼룩"필터를 사용하라는 제안으로 마무리되었습니다. 관련 질문 git diff를 실행하기 전에 출력을 제거하려면 무엇을 사용할 수 있습니까? 대답하지 않은 것 같습니다.
- 3312 : WIP : 노트북 저장 고리 (닫힘) .
- 3747 : ipynb-> ipynb 변환기 (닫힘) . 이것은 4175에 기반 합니다.
- 4175 : nbconvert : Jinjaless 수출 기반 (병합) .
- 142 : 입력이없는 경우 nbstripout에서 STDIN을 사용하십시오 (열기) .