Nikola for jupyer blog

몇 년전부터 Jupyter notebook작성한 것을 언젠가는 블로그에 올려야지 라는 생각은 하고 있었습니다. 하지만 기존에 가지고 있던 워드프레스 블로그에는 편집을 해서 올려야 했기에 너무나도 귀찮았습니다. 그러다가 최근에 Nikola라는 툴을 알게 되면서 다시 블로깅을 하게 되었습니다. Nikola는 간단하게 말해서 HTML 페이지를 자동으로 만들어 줍니다. 제가 할일은 Jupyter notebook을 작성하기만 하면 되는거죠.

0. 환경 설정

먼저, Anaconda가 이미 설치 되어있다고 가정하겠습니다. 설치되어 있지 않다면 검색을 통해 설치해주세요.

가상환경 만들고 실행하기

nikola_blog라는 이름의 가상환경을 생성합니다.

conda create -n nikola_blog python=3

이름은 원하는것으로 수정하시면 되고, 파이썬3를 권장합니다.

터미널에 명령어를 입력하면 몇가지 패키지를 설치 할 것인지 물어보고, 모두 Yes해주시면 됩니다.

source activate nikola_blog
pip install nikola[extras]

가상환경을 실행하고, nikola를 설치 합니다.

1. 블로그 만들기

Nikola가 설치가 되었다면 이제 블로그를 만들어 보겠습니다. 원하는 폴더에서 터미널을 열고 아래의 명령어를 입력하세요.

nikola init

여러가지 질문들이 나오면서 사이트의 이름, 저자, 설명과 URL을 물어봅니다. 나중에 모두 conf.py 파일에서 수정이 가능하니까 너무 고민하지말고 넘어가주세요. 질문이 끝나면 폴더안에 여러 파일과 다른 폴더가 생긴것을 확인 할 수 있습니다.

Jupyter notebook 확장자 추가하기

Nikola가 Jupyter notebook을 처리하기 위해서는 확장자를 추가해 줘야합니다. 폴더안의 conf.py 파일을 열어서 아래와 비슷한 코드를 찾고 다음과 같이 ("pages/*.ipynb", "", "story.tmpl"), 를 추가합니다.

POSTS = (
    ("posts/*.ipynb", "blog", "post.tmpl"),
    ("posts/*.md", "blog", "post.tmpl"),
    ("posts/*.rst", "blog", "post.tmpl"),
    ("posts/*.txt", "blog", "post.tmpl"),
)
PAGES = (
    ("pages/*.md", "", "story.tmpl"),
    ("pages/*.ipynb", "", "story.tmpl"),
    ("pages/*.rst", "", "story.tmpl"),
    ("pages/*.txt", "", "story.tmpl"),
)

2. 새 포스트 작성하기

이제 새로운 포스트를 작성해보겠습니다. 다음과 같이 터미널에 입력을 하세요.

nikola new_post -f ipynb

제목을 물어보고는 알아서 새 Jupyter notebook을 만들어줍니다. 폴더에 새로운 파일이 생성된것을 확인하셨다면, 모든 준비가 되었습니다.

3. 블로그 실행하기

터미널에서 아래 명령어를 입력하고 웹브라우저에서 localhost:8000에 접속하세요.

nikola auto

블로그 생성된것을 확인 하셨나요?

4. Github page에 올리기

git 시작하기

깃허브(Github)는 너무나도 유명하기 때문에 따로 설명드리지는 않을게요. 블로그를 인터넷에 올리기 위해서 깃허브에서 제공하는 서비스를 이용할 거에요. 깃(git)을 어느정도 이해한다는 전제하에 간략하게 설명하겠습니다.

  1. 먼저 깃허브에서 새로운 저장소(repository)를 생성합니다. 이때 이름은 USERNAME.github.io로 하세요. USERNAME은 본인의 ID입니다.
  2. 새로운 저장소가 생성 되면 아래와 같이 터미널에 입력하세요.
git init
git add *
git commit -am "Initial commit"
git remote add origin https://github.com/USERNAME/UsERNAME.github.io.git
git push origin -u
  1. 만약 push 오류가 발생한다면 새로운 파일을 다음과 같이 작성하고 다시 push 하세요
touch readme.md

깃허브에 접속해보면 파일들이 정상적으로 업로드 되어있는것을 확인 하실 수 있습니다.

블로깅하기

이제 모든 단계가 끝났습니다. 로컬에 있는 블로그 폴더에서 작업을 하고 github에 올리기만 하면 되는 것이지요. Nikola에서 보다 편하게 포스팅할 수 있도록 아래의 명령어를 지원합니다.

nikola github_deploy

깃허브에 푸쉬하고 브랜치를 나누는 작업도 알아서 해주는 강력한 기능입니다. 변경사항이 적용되는데는 몇분이 걸리지만 이제, http://USERNAME.github.io 에 접속하면 블로그를 확인할 수 있을 겁니다.

5. Pipenv 사용하기

Pipenvpipvirtualenv의 불편함을 해결하기 위한 툴입니다. Python.org에서 공식적으로 권장하는 패키지 설치 툴이기도 하죠. 특징은 아래와 같습니다.

  • pip와 virtualenv를 따로 쓸 필요가 없습니다.
  • requirements.txt를 대신해 pipfile와 pipfile.lock을 사용합니다.
  • 해쉬가 자동생성되어 보안이 강화됩니다.
  • 패키지들의 의존성 그래프를 그려볼수 있습니다.
  • 다만 속도는 느린편이죠.

5.1. 설치

pip install pipenv

5.2. 실행

pipenv를 사용하고 싶은 폴더에 들어가서 아래의 명령어를 실행합니다.

pipenv install

그러면 자동으로 pipfile, pipfile.lock파일을 생성합니다.이제 가상환경을 사용할 수 있습니다.

5.3. 가상환경 실행

pipenv shell

5.4. 패키지 설치

pipenv install nikola

5.5. Pipenv이 매력적인 점

깃허브(github)에 pipfile, pipfile.lock 파일만 커밋하면 새로운 장소에서 손쉽게 가상환경을 설정할 수 있습니다. 아래와 같이 말이죠.

git clone [https://github.com/pypa/pipenv.git] # pull하고 싶은 저장소
pipenv install