posted by cimple 2015. 6. 3. 16:08

Read-the-docs 사용법


1. Read-the-docs 관련 패키지를 설치하고 환경변수에 등록해준다.

2. 내 파이썬 프로젝트에 docs 라는 폴더를 만든다.

3. sphinx-quickstart 를 하면 이런 저런 설정을 입력하면서 자동으로 환경을 구성해줌

4. make html 을 하면 빌드를 해줌(이 빌드과정은 read-the-docs 와는 상관없다. html 을 만들어 줌으로써 off-line 으로 확인해볼 수 있는 구조. read-the-docs 는 내 코드를 스스로 빌드한다.)

5. github 와 연동되어야 하므로 github repository 에 내 프로젝트 / Document 파일들을 push 해준다.

6. github 에 업로드하면 read the docs 사이트에서 import 해올 수 있음.


github 에 어떤 파일까지 올려야 하는가?

- read the docs 에 가면 내 document 의 관리 페이지에서 오른쪽 하단의 뱃지를 확인할 수 있다.

- 소스코드 / conf.py / index.rst / makefile 로는 no build 만 뜨는 상황.

- _build 폴더까지 같이 올리자 뱃지가 업데이트 되었다

- (하지만 build 는 필요 없을텐데?)


어떻게 소스코드와 연결할 수 있는가?

- 스핑크스가 모듈을 찾기 위해서, import 할 수 있어야 한다. 다시 말해, build 하는 system path 에 등록되어 있어야 한다는 이야기이다.


스핑크스의 작동원리

- Build 를 돌리면, doc 폴더 안에 내부적으로 document 가 생성되게 된다.

- 이 HTML 파일을 그대로 사용하면 바로 그것이 document 가 되는 것이다.

- 그런데 Read the Docs 웹사이트에서 이게 가능하려면, 그 사이트에서 내 document 코드를 빌드할 수 있어야 한다.

- 그렇다면 그 웹사이트 상에서 내 코드를 빌드할 수 있도록 path 를 등록해 주어야 한다. 상대적인 경로로...


Read the Doc 테마 적용방법

- conf.py 파일에서 html_theme 을 찾아서 코멘트시켜 버리고, 다음 코드를 추가한다.

# on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org
on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
# only import and set the theme if we're building docs locally
if not on_rtd:
    import sphinx_rtd_theme
    html_theme = 'sphinx_rtd_theme'
    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]

주석에 적혀있는 대로, online 에서 바로 테마를 가져오던가, 아니라면 local 에서 build 할때 테마를 적용할 수 있다.


C++ 의 사용

- autodoc 을 사용하기 위해서는 doxygen 과 sphinx 를 연결시켜주는 breathe 라는 도구를 활용하게 된다. 추후에 공부가 더 필요할 것.


외부 라이브러리의 import

- Read the Docs 문서에도 설명되어 있지만, RtD 는 사용자의 파이썬 코드를 한번 컴파일하면서 문서를 빌드하기 때문에 라이브러리 의존성이 있다. 따라서 numpy 와 같은 외부라이브러리를 사용한다면 빌드과정에서 에러가 생기게 된다.

여기에 대한 해결방식은 아래 RtD 문서에서 설명하고 있다. 

https://docs.readthedocs.org/en/latest/faq.html#i-get-import-errors-on-libraries-that-depend-on-c-modules

방식을 간단하게만 설명하면, import 하는 라이브러리들을 mock 모듈을 사용해서 가상으로 import 하는 것이다. 어차피 실제로 돌아갈 필요는 없으니까.

- 여기서 알수 있는건, 코드가 실제로 돌아가서는 안된다는 것이다. 즉, 업로드되는 코드가 클래스 및 함수 형태가 되어야지 __main__() 함수 실행같은것을 코드상에 포함시켜서 실제로 돌아가면 에러를 발생시키게 된다.


한글 사용

- conf.py 파일에서 language 옵션을 'ko' 로 주게되면 기본메뉴가 한글로 뜨게 되는데 큰 의미는 없다.

- Sphinx 는 유용한 Internationalization 기능을 지원하는데, 하나의 언어로 작성된 문서를 다른 언어로 번역하여 빌드할 수 있다. 

- 그러나, 사실 개인이 진행하는 소규모 프로젝트에서 이 정도로 문서를 구성하는 것은 무리한 일이 될 수 있어서, 기본적으로 영문이나 한글 둘중의 하나를 선택하여 작성하는 정도로 마무리하려고 한다.

- 한글을 꼭 사용하고 싶으면 python 소스파일 상단에는 

#-*- coding: utf-8 -*-

를 추가하고, conf.py 의 source_encoding 옵션을

source_encoding = 'cp949'

로 바꿔주면 한글 문서작성 및 autodoc 이 가능해진다.

- html 은 온라인빌드/오프라인 빌드 둘다 잘 되는데, pdf 빌드가 깨진다. 이 옵션도 conf.py 에서 잡아주면 될것 같은데 당장 꼭 필요한 옵션같지는 않다...