세팅이 반이다_“오직 아는 자만이 망치를 쓸 수 있다.”_ JUPYTER NOTEBOOK_ 3편

그는사악해·2021년 8월 29일
1

세팅이 반이다.

목록 보기
8/8
post-thumbnail

썸네일 이미지 출처: https://www.artstation.com/artwork/4b6oKL

Autopep8 이라는 망치

MARVEL CINEMATIC UNIVERSE에서 토르에게는 MJONIR(묠니르)라는 망치가 있었고, STORMBREAKER(스톰브레이커)라는 망치(와 도끼 믹스된)가 있다. MJONIR(묠니르) 망치는 토르의 아빠인 오딘이 준 것으로 전해져있는데, 토르 1편에서 오딘이 MJONIR(묠니르)에게 속삭이며 주문을 건다.

"오직 자격이 있는 자만이 망치를 들 수 있다."

그런데 JUPYTER NOTEBOOK을 사용하는 우리에게도 묠니르같은 망치가 존재한다. 물론 적의 머리를 뽀개거나, 손을 뻗으면 어디에 있든 달려오는 그런 건 아니다. 하지만, 이 망치는 우리의 JUPYTER NOTEBOOK의 코드의 가독성이 좋아지는 신비의 망치이다. 그 이름은 'Autopep8'. 생각보다 많은 사람들이 모르는 것 같기에 여기서 공유한다.

"오직 아는 자만이 이 망치(Autopep8)를 쓸 수 있다."

시작하기 전에

1) Anaconda, Miniforge3
필자의 경우, Window 10과 M1 Mac을 사용하며 설치했다. 필자가 소개하는 방법으로 설치가 가능한데, 만약 안 될 경우, 구글링을 통해 설치 방법을 찾아보기를 바란다.
2) Conda 가상환경
Conda env에서도 설치가 가능하다. 필자는 이 포스트에서 Conda 가상환경으로 설치를 진행하며 소개하려고 한다.
3) Window 10 유저
anaconda prompt, Git bash 등 뭘 쓰든 상관 없다.

00. 먼저 JUPYTER_NOTEBOOK을 실행해보자

JUPYTER_NOTEBOOK을 실행해서, ipynb 파일을 새로 열든, 가지고 있는 파일로 열든 상관없으니, 한 번 열어보자. 그리고 한 번 기억해보자. 필자도 스크린샷을 첨부하겠다. "뭐하러 이런 짓을 하나?" 싶을 수 있는데, 그냥 한 번만 해보자.

01. if you use 'Conda env':

Conda 가상환경 사용자라면, 가상환경을 활성화시키고 진행하자.
필자의 경우, M1 Mac의 특성상 Conda 가상환경 4개(vader, ren, yoda, jedi) 사용하고 있는데, 이 중 vader로 진행해보고자 한다.

conda activate vader

필자는 conda activate vader 라고 하지 않아도, vader 만 입력해도 conda 가상환경 vader가 활성화된다. 이에 대한 안내를 원하면 필자의 포스트 중 Git Bash 편을 참고하자.

02. 라이브러리 설치

아래 코드를 입력하고 실행해보자. 휘황찬란(?)하게 설치가 진행된다.

pip install jupyter_contrib_nbextensions 

03. JUPYTER_NOTEBOOOK에서 보일 수 있도록 등록

다음으로 아래 코드를 입력하고 실행해보자. JUPYTER_NOTEBOOOK에서 보일 수 있도록 등록하는 과정이다.

jupyter contrib nbextension install  --user 

04. Autopep 8

우리의 망치의 핵심인 Autopep8 을 설치하는 과정이다.

pip install autopep8

일단 여기까지 잘 따라왔다면, 설치가 끝난 것이다.

05. JUPYTER_NOTEBOOK을 실행해보자.

필자는 jn만 입력해도 JUPYTER_NOTEBOOK이 실행된다

jupyter notebook

06. JUPYTER_NOTEBOOK 파일 하나 열어보자.

기존에 가지고 있던 ipynb 파일이든, 새로 하나 열어도 상관없다. 열어보자. 그리고 상단 탭에서 'Edit'을 클릭하고 가장 아래의 'nbextensions_config'를 클릭하자.

07. Nbextensions configuration 페이지

필자와 같이 아래와 같은 페이지가 새탭에서 열릴 것이다. 처음 열면, 좌측 상단의 'Configurable nbextensions' 밑에 ' disable configuration for nbextensions ...' 이 부분이 체크되어있을텐데, 체크를 해제한다. 그러면 그 밑에 여러 옵션들이 선택할 수 있겠끔 활성화되는데, 그 중 Autopep8을 클릭해서 체크하면 되겠다. 필자의 스크린샷을 참고하자.

08. ipynb로 돌아와서 'Kernel Restart'

ipynb로 돌아와서 'Kernel Restart' 를 해주자. 그럼 '망치'가 보일 것이다. 필자 스크린샷에서 중앙을 확인해보자.

09. 이제 망치의 위력을 확인해볼까?

먼저 Cell 에 다음 코드를 복사해서 붙여넣어보자. 일부러 이렇게 한거니 일단 복사해서 붙여넣어보자. 그리고 잘 봐두고 기억해둔다.

from sklearn.datasets import load_boston

boston=load_boston()
df_X =pd.DataFrame(   boston.data,columns=boston.feature_names)
df_y=pd.DataFrame(boston.target, columns=       ["MEDV"]          )
df=pd.concat([df_X,df_y],  axis      =       1)
df.head(  )

10. 그리고 망치를 클릭해보자.

11. 그리고 9번에서 붙여넣은 코드를 다시 살펴보자.

'Autopep8' 이라는 망치가 보기 이쁘게 python 철학에 맞게 코드를 정리해준 것이다. 이게 'Autopep8' 이라는 망치의 위력이다.

이 망치가 매우 유용할 것이다. 여러분도 토르 부럽지 않은 Autopep8 망치가 생겼다. :)

이렇게도 설치 가능하다!

필자의 경우, Window10과 AWS EC2에 설치를 했을 때, 아래 코드로 설치했던 것으로 기억한다. 아래 코드는 여기를 참고했다. 당시에 Conda env 를 사용하지 않을 때였다.

pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install

또 다른 방법
위 방법 말고도 아래 코드로도 가능하다(는데 필자의 M1 Mac 의 경우 안 먹혔다.)

# 1) 아래 코드 실행 후, JUPYETER Restart
conda install -c conda-forge jupyter_contrib_nbextensions
# 2) Autopep 8 설치
conda install -c conda-forge autopep8
# 이후 위 과정 중 5번부터는 동일하다.

주의 및 Tips

1) Conda env 2개 이상이라면?

모든 Conda 가상환경에서 사용하고 싶다면, 다 위와 같은 과정들을 거쳐야한다. 얘를 들어, 지금 설치한 vader 라는 가상환경이 아닌, Autopep8 을 설치하지 않은 다른 가상환경을 실행하면, (망치 아이콘도 보이겠지만) 아래의 스크린샷과 같은 에러팝업 메세지가 뜰 것이다.

굳이 필요없다면, 쿨하게 확인 버튼을 두 번 정도 눌러주고 넘기면 된다.

2) 너무 많이 Space?

일부러 실험하는 차원에서 Space를 정말 많이 입력하고 Autopep8 망치를 클릭해보았다. 그런데 이 경우는 Autopep8 망치가 교정 안 해준다.

3) NbExtesions

아래 스크린샷을 보면, 여러 NbExtesions의 다른 기능들이 있다. 이에 대한 것들은 차차 사용해보고 기회가 될 때 리뷰하겠다.

4) Conda env 가상환경

: Pytorch, Tensorflow, XGBoost 등 쓰려면, 가상환경 생성하고 이용하는 게 좋을 것이다. 이건 필자의 의견이다. 호환성 등 여러 이유가 있다.

아래 링크의 포스트를 참고했습니다.
1) https://junpyopark.github.io/Jupyter_Extension/
2) https://blog.naver.com/PostView.nhn?blogId=kiddwannabe&logNo=221583729175

profile
데이터를 베어라

1개의 댓글

comment-user-thumbnail
2021년 12월 29일

오.. 이런 기능이 있었네요 덕분에 좋은 정보 얻어갑니다!

답글 달기