본문 바로가기

블로깅

쥬피터 노트북 커스터마이징 & 티스토리 업로드

이번 글에서는, 쥬피터 노트북 스타일 커스터마이징부터, 티스토리 업로드까지 한 번에 다뤄보려고 한다.

사실 처음에는, 티스토리에 쥬피터 노트북으로 작업한걸 올리고 싶었는데, 기본 쥬피터 스타일을 티스토리에 그대로 올리면 영 이쁘지가 않았다. 그래서 쩌다보니, 내가 사용하는 쥬피터 스타일 자체도 바꾸게되었다.

최종적으로, 쥬피터 노트북은 다음과 같은 스타일로, (나는 github style을 사용했다.)

티스토리에는, 파이썬으로 데이터 시각화하기 1편. matplotlib. 이런식으로 올라간다고 보면 된다.

그리고, 이전에 쥬피터 커스터마이징 글들이 많이 참조하여, 쉽게 따라할 수 있었다.

1. Jupyter Notebook 스타일 바꾸기

일반적으로 pip install jupyter 로 쥬피터 노트북을 설치하면 ~/.jupyter/ 경로가 존재한다.

하지만 conda create -n <env-name> python=<version> 식으로, conda 안에서 작업하는 경우, ~/.jupyter/ 디렉토리가 없다. 이 경우, conda 안에서 다음과 같이 명령어를 주면 ~/.jupyter/ 경로가 생긴다.

$ (py36) jupyter notebook --generate-config

이제 ~/.jupyter/custom 디렉터리를 만들고 안에 custom.css 파일을 만들어, 여기에 원하는 스타일을 추가해주면 된다. 이게 일반적인 방법이고, 원하는 html 각 요소를 스타일링하는 방법이다.

많은 사람들이, 미리 이쁜 css 스타일을 만들어놨는데, 나는 이 중 github 스타일을 사용하려고 한다.

해당 코드는 아래 링크에 있다.

A Github Flavored Theme for Ipython or Jupyter Notebook

https://gist.github.com/aahoo/e8ed425759711ead1ef7e7a3332dcd2d

위 링크에서 접속해 custom.css 안의 코드를 복사해, 아까 만든 custom.css 에 붙여넣기 해주면 된다.

저장 후, 쥬피터 노트북이 켜져있다면 새로고침을, 안되면 껐다가 다시 켜보면, 새롭게 스타일링이 된 걸 볼 수 있다.

2. Jupyter Notebook을 Custom.css 적용해서 Export 하기

이제 내 노트북 파일을 html 로 export한 뒤, 해당 html 내용을 티스토리에 올리면 될 것 같다.

노트북 상단 메뉴에서 File - Download as - custom(.html) 을 클릭하여 html 파일로 내보낸다.
이 때 주의할 건, 그냥 .html 이 아니라 .custom(html) 을 해줘야 한다는 것이다.

3. 티스토리에 알맞게 게시하기

이제 해당 html 파일을 복사해 티스토리 에디터의 html 모드로 바꾼 뒤, 게시하면 된다.

근데, 아마 해보면 글 내용, 즉 노트북 내용이 블로그의 컨텐츠 박스를 넘친다. 한마디로, 쥬피터 노트북 넓이랑 블로그 레이아웃이랑 스타일링 요소가 맞지 않아서 전체 레이아웃이 깨진다.

이건 custom.css 에서 수동으로 조정해줘야 하는 문제인데, 티스토리 스킨의 css에서 .containerwidth 값을 파악해 바꿔줘야 한다. 구글 개발자 도구를 통해 .container 클래스를 확인해보자.

내가 쓰고있는 스킨의 경우 width 가 860px 로 되어있었다. custom.css 를 다시 열어, 해당 부분을 다음과 같이 수정하자.

/* custom.css */
...
.container {
  width: 100%;
  max-width : 860px;
  ...
}
...

저장 후, 다시 export 시켜 티스토리에 업로드하면, 이번엔 잘 되는 것을 볼 수 있다.

4. 조금 더 정교하게 export 하기

조금 더 정교하게 html을 만드는 법을 잠깐 간략하게 적어놓을까 한다.

4.1 nbconvert config 옵션 사용하기

예를 들어, 다음과 같이 html 안에 input, output prompt (In [0], Out[2] 표시) 를 지우고 싶을 수 있다.

이렇게 하기 위해 가장 쉬운 방법은 nbconvert 명령어에 config 인자를 주는 방식으로 export 하는 방법이다.
예를 들어 터미널에서 다음과 같이 하면 된다.

$ (py36) jupyter nbconvert --to html 'sample.ipynb'
                           --TemplateExporter.exclude_input_prompt=True
                           --TemplateExporter.exclude_output_prompt=True
                           --output 'sample.html'

sample.ipynbsample.html 로 export 할 때, input_prompt와 output_prompt 를 html 파일에서 제외시킨다는 옵션을 준 것이다. 이런식으로 config 옵션을 제공하는데, 어떤 것들이 있는지 아래 링크를 참조하면 된다.

Nb convert Configuration options

https://nbconvert.readthedocs.io/en/latest/config_options.html

4.2 Template 파일 이용하기

쥬피터에서 다른파일로 convert (export) 하는 방법은, 사실 Jinja Template 이라는 일종의 렌더링 소프트웨어를 사용하는 것이다. 기본적으로 export html 할 경우, basic.tpl 이라는 템플릿 파일에 렌더링되어 나간다.

basic.tpl 을 안쓰고, 우리가 임의로 만든 템플릿으로 바꿔서 렌더링 시킬 수 있다. 이 과정 중, 노트북에 원치 않는 내용을 지운다거나, 스타일링을 다르게 한다거나 등, Jinja 문법을 사용하여 여러형태로 변모시킬 수 있다.

해당 내용을 여기서 다루진 않고, 아래 아주 잘 설명되어있는 링크가 있어 첨부하는 것으로 마무리 한다. (10분이면 본다.)

Custom Templates for Jupyter Notebooks with Jinja2

https://www.datacamp.com/community/tutorials/jinja2-custom-export-templates-jupyter

그 외 다른 방법들

구글링 해보면, 쥬피터 노트북 테마사용이나, 티스토리 업로드에 대해, 이 것보다 더 쉬운 방법이 몇 개 있긴 하다. (훨씬 간단하긴 하다.)

다만, 별로 이쁘지 않아, 급한게 아니라면 추천하진 않는다.

생활코딩 코딩팁, 주피터 노트북(jupyter notebook) 설치 및 주피터테마 설정

Hoguz님 블로그, 티스토리에 소스코드 올리기.

참고했던 링크