본문 바로가기
삽질/Jupyter

[Jupyter 삽질] 자동완성, 탭tab 키가 안될때 해결방법

by SteadyForDeep 2021. 5. 15.
반응형

 

 

 

// 상황

 

주피터노트북에서는 탭을 누르면 객체의 하위에 선언된 값이나 메소드를 불러주는 자동완성을 지원한다.

또 아무것도 없는 상태나 문자열을 작정하는 중에 자동완성 기능을 사용하면 하위디랙토리의 내용을 보여주기도 한다.

 

이미 배포되어있는 도커를 사용하면 이런 기능을 쓸 수 없는 경우가 종종 있는데

혹은 잘 되던 완성기능을 특정 디렉토리에서는 사용할 수 없는 경우가 있는데

이럴때 해결할 수 있는 방법을 알아보자.

 

 

 

// 원인

 

우선 이 현상의 원인으로 지목되는 1순위는 바로 검색 시간이다.

 

주피터도 인간이 아닌 이상 우리가 탭을 누르면 엄청난 속도로 하위 항목을 검색한 후

해당 문자열로 시작하는 항목을 추려서 보여주는 기능이 탑재된 것이다.

 

따라서 이 후보를 검색하고 모으는데 시간이 어마무시하게 걸린다면

이 기능은 응답이 없는 것 처럼 보이고 어딘가 버그가 난 것처럼 보인다.

 

따라서 우리가 탭을 누르면 원하는 부분만 접근해서 검색하면 참 좋겠다.

 

 

 

// 해결법

 

https://stackoverflow.com/questions/40536560/ipython-and-jupyter-autocomplete-not-working

 

IPython and Jupyter autocomplete not working

I am very new to this and I have no idea why the autocomplete is not working. I tried modifying the ipython config file, installed readline, but still nothing. Help!

stackoverflow.com

 

내가 참고한 스텍오버플로에 의하면 기존의 구버전 쥬피터에서는 jedi라는 파이썬 통계 패키지를 이용하여항목을 검색하고 후보군을 추리는 작업을 진행했다고 한다. 그런데 최근에는 이 패키지를 사용하지 않고 더 빠른 빌트인 검색 툴을 지원하는 모양이다. 따라서 jedi가 default로 켜져있는 상태를 인위적으로 꺼주기만하면 문제가 해결된다.

 

코드는 간단하다.

%config Completer.use_jedi = False

%로 시작하는 명령은 magic command로 현재 사용중인 주피터커널의 환경변수등을 재 설정하는 커맨드를 말한다.

따라서 이 명령어를 ipynb 파일의 머리부분에 넣어주거나 혹은

 

!pip uninstall jedi

와 같이 jedi를 삭제해 버리라고 까지 말하고 있다.

나 역시 이번 이슈를 통해서 처음 알게된 툴이므로 그냥 지워버리는 것에 동의했고 그렇게 했다. 노트북 셀 안에서 느낌표를 붙이면 주피터는 해당 문장을  파이썬 인터프리터로 해석하는 것이 아니라 터미널에서 실행하는 배쉬스크립트로 이해한다.

 

나는 텐서플로우에서 배포하는 도커이미지를 통해서 빌드한 컨테이너로 작업중에 이런 이슈를 만났고 위와같이 해결하였다.

 

 

반응형

댓글