본문 바로가기
Programming/Python

jupyter 사용해보기

by NAMP 2016. 12. 19.

jupyter 사용해보기

맥에서 할 수없는 프로그램을 맥에서 돌리기 위한 방법을 찾다가 jupyter를 알게 되었습니다.

설치

아나콘다를 설치합니다.

CybosPlus 를 이용하기 위한 목적이라면 32bit 윈도우용으로 설치합니다.

실행

아나콘다에 jupyter 패키지가 포함되어 있기 때문에 설치가 끝나면 바로 실행하면 됩니다.

jupyter notebook

기본 8888 포트로 서비스가 실행되고 자동으로 웹브라우저로 접속하게 됩니다.

설정 변경

설정 파일 생성

기본으로 실행하게 되면 local에서만 접근할 수 있기 때문에 설정값을 변경합니다.

실행 되어 있는 프로세스를 종료합니다.

jupyter notebook --generate-config

config 파일을 생성합니다. 위의 명령어를 실행하면 config 파일의 위치가 출력됩니다.

C:\Users[USER].jupyter\jupyter_notebook_config.py

jupyter_notebook_config.py 파일의 내용을 변경하여 설정합니다.

암호 설정

서비스 접근시 암호를 설정하기 위해 암호를 먼저 생성합니다.

python

python 콘솔을 실행합니다.

from notebook.auth import passwd
passwd()

이후 원하는 암호를 입력한 후에 엔터키를 누르면 jupyter 에서 사용할 암호가 생성됩니다

'sha1:51a31098e8c1:9ffede0825894254b2e042ea597d771089e11aed'

이 값을 jupyter_notebook_config.py에 넣습니다.

## Hashed password to use for web authentication.
#  
#  To generate, type in a python/IPython shell:
#  
#    from notebook.auth import passwd; passwd()
#  
#  The string should be of the form type:salt:hashed-password.
c.NotebookApp.password = 'sha1:51a31098e8c1:9ffede0825894254b2e042ea597d771089e13311'

해당 위치에서 주석을 지운 후 생성한 암호를 넣습니다. (위의 암호는 임의로 수정한 텍스트입니다.)

접근 ip 설정

원격으로 접속하기 위한 설정도 변경합니다.

## The IP address the notebook server will listen on.
c.NotebookApp.ip = '*'

주석을 지운 후 '*'로 변경합니다. 모든 곳에서의 접근을 허용합니다. 특정 ip 가 있다면 '111.222.111.222' 의 형태로 작성해도 됩니다.

Script 저장 설정

동일한 파일을 수정합니다.


import io
import os
from notebook.utils import to_api_path

_script_exporter = None
_html_exporter = None

def script_post_save(model, os_path, contents_manager, **kwargs):
    """convert notebooks to Python script after save with nbconvert

    replaces `ipython notebook --script`
    """
    from nbconvert.exporters.script import ScriptExporter

    if model['type'] != 'notebook':
        return

    global _script_exporter

    if _script_exporter is None:
        _script_exporter = ScriptExporter(parent=contents_manager)

    log = contents_manager.log

    base, ext = os.path.splitext(os_path)
    py_fname = base + '.py'
    script, resources = _script_exporter.from_filename(os_path)
    script_fname = base + resources.get('output_extension', '.txt')
    log.info("Saving script /%s", to_api_path(script_fname, contents_manager.root_dir))

    with io.open(script_fname, 'w', encoding='utf-8') as f:
        f.write(script)
c.FileContentsManager.post_save_hook = script_post_save

script_post_save 함수 코드를 추가한 다음 c.FileContentsManager.post_save_hook = script_post_save 부분을 수정합니다.

ipynb 파일이 수정되면 동일한 파일명으로 py 파일을 생성하는 코드입니다.

여러개의 노트북 파일을 생성하고 모듈로 불러들이기 위해서 .py 파일을 생성합니다.

하나의 파일만 사용하는 경우라면 위의 코드는 추가/변경 하지 않아도 됩니다.

실행

설정 파일을 모두 수정한 후에 저장한 후 jupyter를 다시 실행합니다.

jupyter notebook

외부에서도 접근 가능합니다. 기본포트는 변경하지 않았으므로 8888포트로 접근하면 됩니다.

실행후 생성한 암호문자열을 입력하고 접속합니다.

파일 생성

new > Python [conda root]

생성한 파일 import

.py 를 생성하도록 설정파일을 변경하였다면, .ipynb 파일을 저장하면 자동으로 .py 파일이 생성됩니다.

현재 작성중인 파일의 위치를 기준으로 import 구문을 사용하면 됩니다.

하위 호환을 고려한 경우라면 폴더에 __init__.py 빈 파일을 생성합니다.

같은 폴더에 있다면

import MyFile

하위 폴더에 있다면

import SubFolder.MyFile

다른 경로에 있다면 추가적인 코드가 필요합니다.

import sys
sys.path.append('../')

import OtherFolder.MyFile

sys.path.append 로 경로를 추가해 주어야 합니다.

에러

import ClassFile
ClassFile()

클래스 파일을 import 후 생성하면 TypeError: 'module' object is not callable 에러가 발생합니다. 아래와 같이 수정합니다.

import ClassFile
ClassFile.ClassFile()


댓글