티스토리 뷰

반응형

iPython 설치하기

iPython은 파이썬의 기본 대화형 쉘의 기능을 향상 시킨 도구이다. 단순한 편의 기능이 몇 가지 추가된 수준이 아니라 최적화, 디버깅, 코드 편집과 탐색에 있어서 많은 양의 개선된 기능들을 포함하고 있다.

  • tab 키를 통한 자동 완성
  • 여러 줄에 걸친 코드 편집 기능 강화
  • 문법에 따른 색상 강조
  • 대화형 쉘 내에서 OS쉘의 명령을 즉시 호출
  • 명령 수행 시간 및 속도 측정 도구 포함
  • 특정 심볼에 대한 빠른 도움말 탐색

또한 iPython은 단순히 명령줄에서 실행되는 대화형 쉘을 개선하는 과정에서 파이썬 커널과 입출력 부분을 분리했다. 따라서 입출력 부분을 웹서버로 떼어내어 개발한 노트북이라는 기능도 별도로 제공한다. 이 노트북은 웹 브라우저 상에서 파이썬 코드를 셀별로 작성하여, 각 셀을 실행/수정하기 매우 편리하며, matplotlib과 같은 시각화 라이브러리의 결과물을 노트북 내에 바로 삽입할 수 있는 장점도 있다.

iPython의 장점을 늘어놓는 것만으로도 몇 개의 포스팅을 써야 할 판이지만, 지금 당장은 그냥 믿고 설치해보자.

설치방법

명령 프롬프트에서 pip --version을 실행하여 아래와 같이 에러 없이 정상적으로 실행된다면 PIP가 제대로 설치되어 있는 시스템이다. 보통 파이썬 3.4 이상을 설치했다면 pip는 기본적으로 함께 설치된다.


>pip --version
pip 9.0.1 from e:\python36\lib\site-packages (python 3.6)

만약 제대로 실행되지 않고 에러가난다면 파이썬 설치 경로 아래의 Scripts 폴더가 PATH 환경 변수에 포함되어 있는지 확인하자. (없다면 추가해주자)

pip를 실행할 수 있다면 아래 명령을 입력하는 것으로 설치가 끝난다.


> pip install ipython[all]

혹은 설치되어 있는 파이썬 배포판이 Anaconda라면 iPython은 이미 설치되어 있을 것이다. 혹시 모르니 다음과 같이 실행해보자.


> conda udpate conda -y && conda install ipython -y

iPython 실행하기

ipython이라고 실행하면 된다.




프롬프트 모양이 >>>에서 In [1]: 로 바뀐 것과 뭔가 약간 컬러풀해진 것 외에는 큰 차이를 못느끼겠다. 우선 ?를 입력하면 도움말이 나온다고 하니 ?를 입력하고 엔터를 눌러보자.




도움말은 제법 긴데, 주로 도움말을 사용하는 방법에 대해서 설명한다. 특정한 오브젝트 뒤에 ? 혹은 ??를 붙이면 그 객체에 대한 도움말을 볼 수 있다.


예를 들어 연속열의 길이를 구하는 함수 len에 대해서 도움말을 확인하는 방법은 len?이라고 치는 것이다.




사용하는 방법과 간략한 설명이 나온다. 순수 파이썬 코드로만 작성된 함수라면 함수명??과 같이 질의하면 해당 함수의 코드까지 자세하게 보여주기도 한다.


몇 가지 명령으로 각자 테스트를 해보시길. 여기서는 함수를 작성하는 예를 살펴보자.




어떤 자연수를 받아서 약수의 합을 구하는 함수를 작성했다. 키워드의 성격마다 색이 다르게 표현되는 부분이 보이는지? 그런데, 여기 작성한 내용에는 중간에 틀린 부분이 있다. while 반복문에서 k를 증가시키지 않아서 무한 루프를 돌기에 딱 좋다. 이를 수정하려면 파이썬의 기본 대화형 쉘에서는 이 함수를 처음부터 다시 다 쳐야한다. 하지만 iPython에서는 위로 올라가는 화살표를 누르면




이렇게 방금 입력한 내용 전체가 표시되며, 이 때 화살표 키를 이용해서 커서를 옮겨 원하는 위치로 이동한 후 편집할 수 있다. 내용을 수정하고 함수를 테스트해보자. 입력한 내용을 수정한 다음에는 ctrl + Enter를 눌러서 라인 중간에 입력을 완료할 수 있다.


그리고 새 셀에서 su까지 타이핑하고 탭 키를 누르면 아래와 같이 자동완성 후보가 나타난다.



여기서 sumOfDivisors.py가 표시되는 것은 해당 디렉토리에 이런 이름의 파일이 있기 때문이다.

이 상태에서 탭키를 몇 번 더 쳐서 원하는 함수에 포커스를 맞춘다음 (28)을 더 입력하고 엔터하면 즉시 실행할 수 있다.

매직 커맨드

매직 커맨드는 iPython을 위한 특별한 매크로 명령들이다. 이는 %quickref라고 입력해보면 엄청나게 많은 매직 명령들을 볼 수 있는데, 그 중에 한 두개만 맛배기로 보도록 하자.

%time 명령은 특정한 명령을 수행하는데 걸리는 시간을 측정해준다. 예를 들어 2백만의 약수의 합을 구하는데 걸리는 시간은 다음과 같이 확인한다.


In [10]: %time sumOfDivisors(2000000)
Wall time: 0 ns
Out[10]: 4980405

음, 알고리듬을 너무 잘짠 나머지 순식간에 구해버린다. 조금 후진 알고리듬으로 함수를 새로 하나 작성해보자.


def sumOfDivisors_(n):     
    s = 0                  
    for i in range(1, n+1):
        if n % i is 0:     
            s += i         
    return s  

(함수 이름 뒤에 언더하이픈을 덧붙여놨음에 주의하자) 이를 측정해보면


In [19]: %time sumOfDivisors_(2000000)
Wall time: 219 ms
Out[19]: 4980405

이런식으로 나온다. 또 %timeit은 한 번이 아닌 여러 번의 측정을 통해서 평균적인 코드 실행 시간을 측정해준다.


In [20]: %timeit sumOfDivisors_(2000000)
212 ms ± 10.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

iPython의 In[*] 부분은 각각의 을 저장하고 있는 셀이며, 히스토리처럼 이전의 입력을 그대로 불러올 수 있으며, 각 셀을 저장하는 것도 간단하다. 필자의 경우 위 두 함수는 6번과 15번 셀에 저장되어 있다. 이는 %save 명령으로 특정 셀 범위 혹은 특정 셀들을 파일로 저장하는 것도 가능하다.

아래와 같이 두 셀의 입력 내용을 파일로 저장했다. (만약 이전에 저장한 적이 없다면 덮어쓰겠냐는 확인은 나오지 않는다.)


In [29]: %save sumOfDivisors.py 6 15
File `sumOfDivisors.py` exists. Overwrite (y/[N])?  y
The following commands were written to file `sumOfDivisors.py`:
def sumOfDivisors(n):
    s, k, l = n + 1, 2, n**0.5
    while k <= l:
        if n % k is 0:
            s += k + n // k
        k += 1
    if k * k == n:
        s -= k
    return s
def sumOfDivisors_(n):
    s = 0
    for i in range(1, n+1):
        if n % i is 0:
            s += i
    return s

저장된 내용을 확인해보자. !을 맨 앞에 붙이면 쉘 명령을 그대로 수행해서 그 결과를 캡쳐해준다. type 명령을 이용해서 방금 저장한 파일의 내용을 확인해보자.


In [30]: !type sumOfDivisors.py           
# coding: utf-8                           
def sumOfDivisors(n):                     
    s, k, l = n + 1, 2, n**0.5            
    while k <= l:                         
        if n % k is 0:                    
            s += k + n // k               
        k += 1                            
    if k * k == n:                        
        s -= k                            
    return s                              
def sumOfDivisors_(n):                    
    s = 0                                 
    for i in range(1, n+1):               
        if n % i is 0:                    
            s += i                        
    return s                              

노트북

iPython은 커널과 입출력 클라이언트가 분리된 구조로 만들어져 있다고 했다. iPython 프로젝트가 발전해 나가면서 개발자들은 이러한 구조에 상당한 확장성이 있다는 사실을 알게되었고, 입출력 부분에 해당하는 구조를 Jupyter라는 별도의 프로젝트로 론칭했다. 여기에는 기본적인 콘솔과 Qt를 이용한 GUI콘솔, 그리고 웹 브라우저를 이용한 노트북이 있다. 이 중에서도 노트북은 콘솔 버전의 대화형 쉘이 가질 수 있는 한계를 넘어서 여러 개의 코드 편집 셀이 있고, 각각의 셀을 개별적으로 실행할 수 있는 구조를 제공한다. (그리고 이게 엄청 편리하다.)

설치

Anaconda 배포판을 사용중이라면 기본적으로 ipython과 notebook은 설치되어 있다. 다음과 같이 업데이트해서 사용하자.


> conda update conda
> conda update ipython-notebook

만약 일반 파이썬 배포판을 사용하는 경우라면 pip를 이용해서 설치한다.


> pip install -U pip
> pip install jupyter[notebook]

구동

설치가 완료됐다면 jupyter notebook으로 실행할 수 있다. 간단한 웹서버가 하나 실행되고 자동으로 브라우저에서 현재 디렉토리가 열린다. (여러분의 노트북 화면은 아래와 같은 디자인이 아닐 수 있다. 아래 화면은 추가적인 테마를 설치한 경우이다.)




우측 상단의 New를 선택해서 커널을 선택하면 (기본적으로 현재 설치된 파이썬의 버전이 표시된다.) 새로운 노트북이 만들어진다.


각각의 셀에 코드를 입력하고 실행할 수 있다. 함수 정의나 모듈 반입등의 내용을 실행하면 이는 해당 세션에서 커널을 재시작하지 않는 이상, 유지된다. 따라서 간단한 클래스, 함수를 작성하면서 테스트하기 매우 좋은 환경이다.




특히 Jupyter 노트북의 경우에는 파이썬 코드외에도 각 셀별로 마크다운이나 파이썬 코드를 작성할 수 있고, 그 결과를 HTML이나 노트북 파일로 다시 저장할 수 있다.

결론

iPython을 사용하는데에는 매직 커맨드와 같이 다양한 편의 기능을 익혀서 사용하는 것도 좋지만, 기본적으로 노트북이나 콘솔에서의 파이썬 쉘 사용을 iPython으로 대체하는 것으로도 코드 입력의 편의성이 크게 높아지므로 무조건 설치해서 사용하는 것을 강추한다.

반응형

'파이썬 how to' 카테고리의 다른 글

파이썬 사전 사용법  (0) 2017.05.19
파이썬 튜플 기초 사용법  (0) 2017.05.15
맵과 필터 그리고 리스트 축약  (0) 2017.05.02
Reduce 사용법, 그리고 lambda  (0) 2017.04.27
파이썬 리스트의 기본 사용법  (0) 2017.04.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함