// 상황
주피터노트북에서는 탭을 누르면 객체의 하위에 선언된 값이나 메소드를 불러주는 자동완성을 지원한다.
또 아무것도 없는 상태나 문자열을 작정하는 중에 자동완성 기능을 사용하면 하위디랙토리의 내용을 보여주기도 한다.
이미 배포되어있는 도커를 사용하면 이런 기능을 쓸 수 없는 경우가 종종 있는데
혹은 잘 되던 완성기능을 특정 디렉토리에서는 사용할 수 없는 경우가 있는데
이럴때 해결할 수 있는 방법을 알아보자.
// 원인
우선 이 현상의 원인으로 지목되는 1순위는 바로 검색 시간이다.
주피터도 인간이 아닌 이상 우리가 탭을 누르면 엄청난 속도로 하위 항목을 검색한 후
해당 문자열로 시작하는 항목을 추려서 보여주는 기능이 탑재된 것이다.
따라서 이 후보를 검색하고 모으는데 시간이 어마무시하게 걸린다면
이 기능은 응답이 없는 것 처럼 보이고 어딘가 버그가 난 것처럼 보인다.
따라서 우리가 탭을 누르면 원하는 부분만 접근해서 검색하면 참 좋겠다.
// 해결법
https://stackoverflow.com/questions/40536560/ipython-and-jupyter-autocomplete-not-working
내가 참고한 스텍오버플로에 의하면 기존의 구버전 쥬피터에서는 jedi라는 파이썬 통계 패키지를 이용하여항목을 검색하고 후보군을 추리는 작업을 진행했다고 한다. 그런데 최근에는 이 패키지를 사용하지 않고 더 빠른 빌트인 검색 툴을 지원하는 모양이다. 따라서 jedi가 default로 켜져있는 상태를 인위적으로 꺼주기만하면 문제가 해결된다.
코드는 간단하다.
%config Completer.use_jedi = False
%로 시작하는 명령은 magic command로 현재 사용중인 주피터커널의 환경변수등을 재 설정하는 커맨드를 말한다.
따라서 이 명령어를 ipynb 파일의 머리부분에 넣어주거나 혹은
!pip uninstall jedi
와 같이 jedi를 삭제해 버리라고 까지 말하고 있다.
나 역시 이번 이슈를 통해서 처음 알게된 툴이므로 그냥 지워버리는 것에 동의했고 그렇게 했다. 노트북 셀 안에서 느낌표를 붙이면 주피터는 해당 문장을 파이썬 인터프리터로 해석하는 것이 아니라 터미널에서 실행하는 배쉬스크립트로 이해한다.
나는 텐서플로우에서 배포하는 도커이미지를 통해서 빌드한 컨테이너로 작업중에 이런 이슈를 만났고 위와같이 해결하였다.
'삽질 > Jupyter' 카테고리의 다른 글
[ Jupyter 삽질 ] Jupyter의 터미널에서 자동완성이 안될때 (2) | 2021.06.01 |
---|
댓글