2016-08-04 9 views
3

Jupyter/iPython 노트북에 코드를 보관하는 가장 좋은 방법과 클래스 메소드의 동일한 코드를 동기화 상태로 유지하려고합니다.jupyter/iPython 노트북 스크립트와 클래스 메소드 간의 코드 동기화

필자는 노트북 내부에서 판다를 사용하는 긴 스크립트를 작성했으며 노트북에서 중간 결과를 확인할 수 있으므로 개발을 쉽게 만든 여러 개의 셀을 사용했습니다. 이것은 판다 (pandas) 스크립트에 매우 유용합니다. 그 작업 코드를 파이썬 ".py"파일로 다운로드하고,이 스크립트를 내 프로그램의 파이썬 클래스 내에서 메소드로 변환하여 입력 데이터로 인스턴스화하고 해당 메소드의 결과로 출력을 제공합니다. 모든 것이 훌륭하게 작동합니다. Python 클래스는 훨씬 더 큰 응용 프로그램에서 사용되므로 실제 전달할 수 있습니다.

그러나 그때 내 스크립트에 있던 메서드의 구현에서 특정 데이터 집합에 대한 버그가있었습니다. 내 수첩으로 돌아가 문제를 찾기 위해 단계별로 다양한 셀을 살펴볼 수 있습니다. 나는이 문제를 해결하지만, 그런 다음 신중하게 파이썬 클래스의 일반 메소드 코드에서 변경해야한다. 이것은 약간 고통 스럽다.

이상적으로, 저는 셀 전반에 걸쳐 클래스 메소드를 실행할 수 있기를 원하므로 중간 결과를 확인할 수 있습니다. 나는 이것을하는 방법을 이해할 수 없다.

그렇다면 클래스 메소드 내에 포함 된 스크립트 코드와 코드를 동기화 상태로 유지하는 가장 좋은 방법은 무엇입니까?

그렇습니다. 클래스를 노트로 가져올 수는 있지만 클래스 메소드 내부의 중간 결과를 개별 셀을 통해 볼 수있는 능력이 없어졌습니다. 이는 순수한 스크립트 일 때하는 일입니다. 팬더를 사용하면 매우 유용합니다.

+0

"jupyter"로 태그 할 수 있습니까?이것은 jupyter 프로젝트 웹 사이트에서 탐색 할 때 jupyter 프로젝트가 링크하는 태그입니다. – Utkonos

+0

@Utkonos이 태그를 추가했습니다. – Irv

답변

4

전 동일한 개발 워크 플로우를 사용했으며 jupyter 노트북을 사용하여 코드를 단계별로 실행할 수 있다는 가치를 인식했습니다. 나는 먼저 세부 사항을 해싱 한 다음 연마 된 제품을 .py 파일로 분리하여 여러 패키지를 개발했습니다. 내가 겪는 불편 함에 대한 간단한 해결책이 없다고 생각합니다. (저는 똑같은 문제를 겪었습니다.)하지만 저는 제 실천을 묘사 할 것입니다. (나는 "최고의"실천이라고 선전 할 정도로 대담하지 않습니다.) 어쩌면 그것을 표현할 것입니다. 귀하의 유스 케이스에 도움이 될 것입니다.

내 경험에 의하면, 내 jupyter 전자 필기장에서 모듈/패키지를 만든 후에는 전자 필기장 외부에서 코드를 유지 관리/개발하고 전자 필기장을 테스트 용으로 가져 오는 것이 더 쉽습니다.

일반적으로 각 방법을 작게 유지하면 노트북을 사용하는 각 단계에서 논리를 테스트하는 데 매우 유용합니다. 큰 "public"메소드를 선행 밑줄 (예 : '_load_file')을 사용하여 명명 된 더 작은 "개인"메소드로 분할 할 수 있습니다. 테스트/디버깅을 위해 노트북에서 "private"메소드를 호출 할 수 있지만 모듈 사용자는 무시해야합니다 이러한 방법.

는 빠르게 소스의 변경으로 가져온 모듈을 새로 고치려면 importlib 모듈에 reload 기능을 사용할 수 있습니다.

import mymodule 
from importlib import reload 
reload(mymodule) 

import를 호출 다시 실제로 네임 스페이스를 업데이트하지 않습니다. 당신이 필요로하는 reload 파이썬이 강제로 모듈 코드를 재 컴파일/실행하도록하는 기능 (또는 이와 유사한 기능)

필연적으로 한 줄씩 개별 기능을 단계별로 실행해야하지만, 코드를 작은 방법으로 분해 한 경우 전자 필기장에서 "다시 쓰는"코드의 양은 매우 적습니다.

+0

이것은 좋은 생각입니다. 또한 이것은 노트북의 초기 워크 플로에서 하나의 큰 스크립트가 아닌 각 단계를 수행하는 많은 작은 메서드를 만들어야한다는 것입니다 . 그런 다음 노트북 외부의 코드와 노트북 내부의 코드 모두에서 각 방법으로 생성 된 중간 결과를보다 쉽게 ​​확인할 수있었습니다. – Irv

관련 문제