jupyter notebook 파일을 마크다운으로 편하게 변환합시다(failed yet)

intro

  • 파이썬으로 공부한 것들을 정리할 때, 보통 jupyter notebook을 활용합니다. 블로그에 포스트를 하려면 markdown으로 변환해야 하는데, jupyter notebook에서 마크다운으로 다운 받으면 해당 디렉토리에 바로 다운 되는 것이 아니라, 다운로드 폴더에 다운이 되고 이를 다시 옮겨야 하는 사소한 부수적인 작업이 생깁니다. 저는 정말 이런게 싫어요

  • 그래서 찾아보니까 이런 내용을 찾을 수 있었습니다. 로컬에서 바로 옮길 수 잇는 것 같군요. 흠…

    • 아마도 이를 실행하려면 몇 가지 라이브러리를 설치하는 것이 필요할 것 같기는 한데, 저는 아마 예전에 깔아두어서 문제없이 실행된게 아닐까 싶습니다.

just do it

  • 아래 코드를 씁니다. 만약 markdown이 아닌 html으로 변환하고 싶다면 해당 자리에 html을 타이핑하시면 됩니다.
  • 아무튼 아래 코드를 실행하시면 마크다운 파일이 생겨납니다.
jupyter nbconvert --to markdown '2017-11-13-python - networkx(final).ipynb'

아직 해결하지 못한 것들

  • ipynb를 마크다운 파일로 변경한다고 해도, 이미지 경로는 여전히 문제가 됩니다. 쥬피터 노트북 내에서 cell 내부에 이미지를 보여주는 코드가 있고(예르 들어서 plt.show()) 해당 cell을 실행시킨 다음 쥬피터 노트북을 마크다운으로 변환하게 되면, 해당 이미지를 보여주는 마크다운 코드가 첨부됩니다.
  • 문제는 ipynb와 같은 경로에 이미지가 있다고 가정하는 것이 문제 입니다. 지킬에서는 asset/images/에 이미지를 업로드해야 하거든요. plt.savefig()의 경로와 쥬피터노트북을 마크다운으로 변환시에 마크다운에서 표시되는 경로가 다릅니다.

예를 들어 설명하자면,

  • 쥬피터 노트북에서 아래 코드 셀을 실행하면, 셀 아래에 그림이 뜹니다.
    plt.savefig("/asset/images/markdown_images/aaa.png")
    
  • 그 상태(해당 셀 밑에 그림이 존재하는 상태)에서 마크다운으로 변환하면 해당 이미지는 다운이 되고 마크다운 파일 내에서는 경로가 다음처럼 선언됩니다.
    ![png](aaa.png)
    
  • 물론 일반적으로는 문제가 없습니다. 일반적으로는 마크다운 파일과 이미지 파일이 같은 폴더에 있다고 생각하면 되니까 아무런 문제가 없어요. 다만, jekyll에서는 모든 이미지 파일이 asset/images 아래에 있어야 합니다.
  • 제가 이미 코드 상에서는 해당 폴더에 이름을 넣어뒀으니 마크다운에서 이미지를 첨부하는 코드들만 제대로 되어 있으면 되겠죠?

자 그럼 이걸 어떻게 해결할 수 있나요?

방법 1

  • 그냥 마크다운 파일에서 이미지 첨부 링크를 일일이 바꿔줍니다.
    • ![png](aaa.png) ==> ![png](/asset/images/markdown_images/aaa.png)
    • 좀 성가시기는 하지만, 이미 들어가야 하는 부분에 제가 원하는 형식으로 만들고, 전체 변경하는 식으로 진행하면 괜찮을 것 같기도 합니다.

방법 2

  • front-matter에서 path 등을 설정해서 뭔가를 할 수 있지 않을까요?
    • 될것 같은데, 아직 이렇게 하는 방법을 찾지는 못했습니다.

방법 3

  • _config.yml에서 이미지에 대한 특정 path를 설정할 수 있지 않을까요?
    • [잘 모르겠어서 다른 사람들에게 물어봤다]. 그런데, 답을 해주기는 했지만 잘 되지 않습니다. (https://stackoverflow.com/questions/49999511/is-there-a-way-to-make-it-easier-to-attach-images-to-markdown-in-jekyll). front-matter를 활용하거나, _config.yml을 활용하거나 이 두 가지 방식이 가능하지 않을까? 하고 생각하는데, 흐음.
    • 여기서 base-url을 바꾸거나 하면 되지 않을까? 생각하는데 그 경우에는 post 자체를 읽지 못하는 일이 발생했습니다.

방법 4

  • 음 잘 모르지만, liquid variable로 문자열을 특정 변수에 저장해둔 다음 이미지를 불러올대 이를 이용할 수 있지 않을까?
    • color 들은 liquid variable에서 불러올 수 있는데, 이렇게 이미 저장해둔 문자열 스트링을 임의로 가져올 수 없을까?

lesson learned

  • 아무래도, 현재 명확한 해결방법을 못 찾은 것은 jekyll의 활용법을 잘 모르기 때문이 아닐까 싶다. 조만간 시간을 내서 jekyll을 다시 공부하는 것이 필요함

댓글남기기