본문 바로가기
코딩/Python

쉘(터미널, 커맨드라인)에서 파이썬 코드 자동 완성(추천)하는 방법/IPython

by 나홀로코더 2022. 1. 18.
반응형

목차

1. 주제 소개

2. IPython 소개


 

1. 주제 소개

 

제목을 어떻게 지어야 할지 몰라 일단 저렇게 지었는데, 이 글의 주제를 정확히 전달하는지 모르겠다.

 

먼저 이를 명확히 하자면, 이 글은 VS Code와 같은 IDE나 일반 텍스트 편집기를 이용해서 파이썬 스크립트(.py) 파일을 작성하는 경우가 아닌 쉘(Shell)에서 파이썬 코드를 바로 사용하는 경우에 관한 글이다. 따라서 파이썬 스크립트를 작성할 때의 자동 완성에 대해 검색 중인 독자라면 읽을 필요가 없다.

 

이에 대해 부연 설명을 하자면, 파이썬 코드를 실행하는 방법은 크게 2가지이다.

 

파이썬 스크립트(.py) 파일을 작성하여 그 스크립트를 실행하는 방법과 스크립트를 따로 작성하지 않고 아래와 같이 대화형 인터프리터를 사용해 바로바로 코드를 실행하는 방법이다.

 

대화형 인터프리터

 

VS Code처럼 편하게 파이썬 스크립트를 작성하고 실행해 볼 수 있는 프로그램(IDE)이 많기 때문에 주로 그 방법을 이용할 테지만, 가끔은 인터프리터를 켜고 짧은 코드를 실행해보는 경우가 생긴다.

 

그런데 VS Code같이 코드 작성을 거의 떠 먹여 주는 방법을 이용하다가 인터프리터를 쓰려면 조금 답답하다.

 

탭 키만 누르면 알아서 코드 조각들을 불러다가 코드가 써지는 그런 편리한 기능들이 없기 떄문이다.

 

이럴 때 쓸 만한 도구인 IPython을 소개한다.

 

반응형

 

2. IPython 소개

 

위키백과에서는 IPython을 이렇게 소개하고 있다.

 

 

IPython은 복수의 프로그래밍 언어에서 상호작용적인 컴퓨팅을 하기 위한 명령 셸이며 파이썬 프로그래밍 언어용으로 처음 개발되었다. 자가 검사, 대화형 매체, 셸 문법, 탭 완성, 히스토리를 제공한다. 

 

말이 조금 어려워 보이기도 하는데, 필자같은 초보자들이 알아듣기 쉬운 언어로 바꾸자면 파이썬의 순정(?) 대화헝 인터프리터와 같은 일을 하는데 조금 더 똑똑한 녀석이라고 생각하면 되겠다. 파이썬 코드를 입력하면 한줄씩 실행을 해 주는데, 여러 추가적인 기능을 제공한다는 것이다.

 

IPython이 어떤 모습인지를 먼저 보자. 터미널을 열고 IPython을 입력하면 아래와 같이 IPython이 실행된다. 검은 바탕에 흰 글씨뿐인 파이썬 인터프리터와 달리 색이 입혀진 In [1]: 표시가 반갑게 느껴진다.

(설치가 안 되어 있으면 pip install ipython 명령어로 먼저 설치를 하면 된다.)

 

코드를 몇 줄 입력해보면, 마치 IDE를 사용할 때처럼 보기 좋게 색이 입혀지는 모습을 볼 수 있다.

 

Ipython 실행한 화면

 

IPython의 장점은 이뿐만이 아니다.

 

먼저, IPython은 탭 완성 기능을 제공한다.

 

VS Code같은 IDE를 사용할 때처럼 탭 키만 누르면 코드를 자동 완성해 주거나, 사용 가능한 코드를 추천해 준다.

 

import datetime을 입력하려면, im까지 입력한 다음 탭을 누르고, datet까지 입력한 다음 탭을 누르면 나머지를 자동으로 완성해 준다.

 

그뿐만 아니라 데이터 타입에 기반해서 사용 가능한 함수들도 추천을 해준다.

 

문자열 "a"와 마침표(.)를 입력한 다음 탭을 눌러 보면, 아래와 같이 사용 가능한 함수(메서드)들을 추천해 주는데, 탭을 한 번 더 누르고 방향 키를 이용해서 필요한 것을 선택해서 쓰면 된다.

 

탭 완성 예시

 

반응형

 

다음으로, 파이썬 인터프리터에 비해서 더 나은 히스토리 기능을 제공한다.

 

파이썬 인터프리터도 방향 키를 이용해서 이전에 사용했던 코드들을 확인할 수 있는데, IPython의 경우 여기에 큰 차이점이 있다.

 

예를 들어 아래와 같은 코드를 입력한다고 가정해보자.

 

for i in range(3):
	print(i)

 

위 코드를 파이썬 인터프리터와 IPython에서 입력하면, 첫 줄에서 for문이 끝나지 않았기 때문에 둘째 줄은 앞부분이 ... 표시로 바뀌면서 두 줄의 코드가 하나의 블록으로 처리가 되고, 둘째 줄을 입력하고 엔터를 두 번 치면 코드가 실행된다.

 

그 상태에서 위쪽 방향 키를 한 번 눌렀을 경우 아래와 같이 파이썬 인터프리터와 IPython에 표시되는 결과물이 서로 다르다.

 

파이썬 인터프리터

 

IPython

 

방향 키를 사용했을 때 파이썬 인터프리터의 경우 코드 블럭의 마지막 줄만 불러오는 반면, IPython은 코드 블록이 전부 불러온다.

 

이는 실제 사용상에 큰 차이를 불러 오는데, 앞서 입력한 코드 블록에 오타나 오류가 있어 일부만 수정이 필요하거나, 혹은 코드 블록 전체를 다시 실행하려는 경우, 아래와 같이 키 입력 횟수가 달라진다.

 

파이썬 인터프리터  : ↑ ↑ Enter ↑ ↑ Enter Enter (총 7회)

IPython                  : ↑ Enter Enter (총 3회)

 

코드 블록이 겨우 2줄이어서 차이가 별로 나지 않아 보이는데, 파이썬 인터프리터의 경우 코드 블록이 한 줄 길어질 때마다 필요한 키 입력 횟수가 계속 늘어나는 반면(3줄일 경우 총 13회), IPython은 코드 블록이 몇 줄이든 총 3번만 키를 누르면 코드 재실행이 가능하다.

 

인터프리터에서 파이썬 코드를 실행해 본 적이 있다면 이 차이가 얼마나 큰지 체감이 될 것이다.

 

반응형

 

여기까지 필자가 가장 추천하고 싶은 IPython의 특징 소개를 마치고, 추가적으로 두 가지 기능을 더 소개한다.

 

IPython에서는 파이썬 코드뿐만 아니라 커맨드라인 명령어를 바로 사용할 수 있다.

 

(필자가 요즘 termux를 애용하는 관계로) 리눅스를 기준으로 예를 들면, 파이썬 인터프리터에서 ls 명령어(현재 디렉토리 내의 파일과 폴더 리스트를 출력)를 실행하려면 아래와 같이 os 모듈을 불러온 다음 system 함수를 사용해야 한다.

 

>>> import os
>>> os.system("ls")

 

반면 IPython을 사용할 경우, 커맨드라인에서 하는 것과 똑같이 그냥 ls만 입력하면 된다.

 

다음으로, IPython에서는 매직커맨드를 사용할 수가 있다. 

 

주피터노트북 사용자라면 아마 매직커맨드게 무엇인지 알 것인데, 예를 들면 자주 사용되는 매직커맨드인 %%timeit을 사용해서 내가 작성한 코드의 실행 시간을 측정할 수 있다.

 

timeit 매직커맨드 예시

 

%lsmagic을 입력하면 사용 가능한 매직커맨드를 모두 볼 수 있다.

반응형

댓글