직접 만든 파이썬 모듈(.py)을 주피터 노트북(.ipynb)에서 불러와 사용하는 경우가 있습니다. 예를 들어, 파이썬 모듈로 만든 계산기 기능을 주피터 노트북에서 사용하는 경우를 생각해 볼게요.
아래와 같이 calculator.py라는 파일에 더하기와 빼기 기능을 하는 함수가 있습니다.
plus()와 minus()라는 함수는 파라미터로 두 값을 받아와 각각 더한 값과 뺀 값을 리턴하는 함수입니다. 해당 함수를 example.ipynb라는 주피터 노트북 파일에서 한번 불러와 보도록 하겠습니다(참고로, calculator.py와 example.ipynb는 같은 디렉토리에 있어야 합니다).
두 함수가 잘 불러와 지네요. 사용도 잘 되는지 확인해 볼까요?
결과도 잘 나옵니다.
그러면, 이번엔 calculator.py에 곱하기 기능을 하는 함수 times()를 추가해 볼게요.
이제 해당 함수를 example.ipynb에서 불러와 보겠습니다.
분명 calculator.py 파일에 times() 함수를 추가해 줬는데 불러와지지 않네요. 이것은 주피터 노트북에서 한번 불러온 모듈에 수정 사항이 발생했을 때 자동으로 다시 로드해주지 않기 때문입니다. 처음 불러왔을 때에는 분명 times()라는 함수가 없었기 때문에, 이후에 수정된 내용을 인식하지 못하고 에러가 난 것이죠.
가장 간단한 해결 방법은, 주피터 노트북에서 실행되고 있는 커널을 Restart 하는 것입니다.
한번 Restart를 하고 나니 times() 함수도 잘 불러와지네요.
하지만, 매번 외부 모듈이 수정될 때마다 커널을 다시 시작하는 것은 불편합니다. 지금처럼 코드가 많지 않은 경우에는 커널을 다시 시작해서 전체 셀을 다시 시작하면 되는데, 만약에 코드도 엄청 많고 셀이 수백개가 되는 경우에는 작성했던 모든 코드를 다 다시 실행하는게 너무 비효율적이죠.
또, 혹시라도 큰 데이터를 돌려서 실행 시간이 오래 걸리는 셀이 있다면 커널을 재시작 할 때마다 매번 새로 셀을 실행하는 게 부담이 될 겁니다.
이런 이유로 외부 모듈의 수정이 될 때 알아서 자동으로 반영이 되는 익스텐션을 사용해 주는게 좋습니다. 그 과정을 한번 보여 드릴게요.
먼저, 커널을 한번 재시작(Restart) 하고 아래 익스텐션을 실행해 주세요.
%load_ext autoreload
%autoreload 2
그 다음, calculator.py 모듈에서 plus(), minus(), times() 함수를 불러오겠습니다.
커널을 시작할 때 세 함수가 모두 존재하는 상태였으니 당연히 에러가 나지 않겠죠? 그러면, calculator.py 파일에 나누기를 하는 함수 divide()를 추가해 보겠습니다.
그리고, 새롭게 추가한 나누기 함수 divide()를 example.ipynb에서 불러와 볼게요.
모듈이 중간에 수정이 됐지만 이번에는 에러가 발생하지 않고 결과가 잘 나왔습니다.
이렇게 중간에 수정이 될 수 있는 파이썬 모듈을 주피터 노트북에서 불러와 사용할 때에는 자동으로 수정 사항이 리로드 될 수 있게 미리 설정해야 합니다. 이 점 참고해 주세요.
'Data Analysis > Data Analysis Practice' 카테고리의 다른 글
데이터 분석가가 갖춰야 할 9가지 역량 (0) | 2023.06.19 |
---|---|
scikit-learn 사용해 보기 (0) | 2023.06.19 |