一 簡單介紹html
不論是開源仍是閉源,文檔都是很重要的。固然理論上說,最好的文檔就是代碼自己,可是要讓全部人都能讀懂你的代碼這太難了。因此咱們要寫文檔。大部分狀況,咱們不但願維護一份代碼再加上一份文檔,這樣作很容易形成文檔和代碼的不一致,程序員最討厭更新文檔了。因此最佳實踐就是在程序員代碼中加註釋,而後經過構建腳本自通生成文檔,包括html,latex,pdf等。
對應於Pyhon,有不少可供選擇的工具:python
二 安裝git
三 建立一個sphinx項目程序員
下面的命令會自動生成一個默認的Sphinx模板:
github
mkdir yourdir cd yourdir sphinx-quickstart
執行期間,它會一步步的詢問對模板的設置,除了一些必須填寫的選項,大部分填寫默認值就好了,你會遇到這樣一條叫autodoc的,須要選擇yes!工具
autodoc: automatically insert docstrings from modules (y/n) [n]
而後默認的目錄就生成了,大概是這個樣子優化
- yourdir/ # 剛纔新建的目錄
- source/ # 存放Sphinx工程源碼
- build/ # 存放生成的文檔
Makefile
如今執行以下指令,就會生成一份空文檔,存放在/build/html裏,點擊index.html就能夠打開一個空的網頁,雖然沒有內容,可是總體的結構仍是在的!ui
sphinx-build -b html source build make html
source/目錄裏有兩個文件,分別是conf.py
和index.rst
,下面對它們進行進一步的介紹this
(1) index.rstspa
.rst是reStructuredText,和Markdown同樣是一種標記語言,具體的語法能夠看這裏 reStructuredText Primer。實際上,咱們在使用Sphinx的過程當中最主要就是對這些rst文件進行修改,而Sphinx所作的事情就是讀取這些rst文件,並轉換爲特定格式的文檔,在前面的步驟中,index.rst實際上被轉換爲build/html/index.html,而實際上在rst文檔內你能夠寫任何東西,最後這些都會被轉換到輸出文檔中。
打開index.rst,能夠看到這樣的內容,這是rst的一個語法,它使用了一個toctree節點,並設置了一些參數,而這個toctree節點是必須的。
.. toctree:: :maxdepth: 2 :caption: Contents:
(2) conf.py
這是運行sphinx生成文檔時會加載的配置,你能夠經過對它進行修改來改變生成文檔的行爲。
四 一個具體的例子
假設如今咱們有一個叫run.py的文件,以下
# run.py
def run(name): """ this is how we run :param name name of people who runs """
print (name, 'is running')
那麼須要如何生成文檔呢?下面一步步帶你完成
Welcome to demo's API Documentation ======================================
.. toctree::
:maxdepth:2
:caption: Contents:
Introduction ============
This is the introduction of demo。
API ===
.. automodule:: run
:members:
Indices and tables ==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
這個是用於自動從模塊讀取docstring的語句,能夠自動從run模塊讀取文檔
.. automodule:: run
:members:
可是如今還差一步,若是你如今直接生成文檔,會告訴你找不到run模塊,由於Sphinx默認只會從sys.path里加載模塊,因此須要將demo目錄加入sys.path,因此如今打開conf.py,添加以下內容
import os import sys sys.path.insert(0, os.path.abspath('../..'))
運行Sphinx生成html文檔
cd .. sphinx-build -b html source build make html
如今,打開build/html/index.html就能夠看到以下界面了
注:格式進一步優化
上面的例子涵蓋了大多數經常使用操做,可是一般文檔都不是扁平的,而是層次化的,那麼要如何將文檔層次化的分門別類。實際上在rst文檔中是能夠以連接的形式引用其餘rst文檔的,也就是說咱們能夠自由的對文檔結構進行組織使其更易讀。下面咱們把run的文檔移動到一個單獨的頁面,只在index.rst裏保留跳轉連接。在source目錄下建立run.rst
API === .. automodule:: run :members: Indices and tables ==================
* :ref:`genindex` * :ref:`modindex` * :ref:`search`
而後將index.rst對應位置的內容刪掉,並進行修改
Welcome to demo's API Documentation ===================================
.. toctree::
:maxdepth: 2
:caption: Contents:
Introduction ============
This is the introduction of demo。
API ===
:doc:'Run API</run>'
Indices and tables ==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
:doc:'Run API</run>'
表示對一個文檔的引用,這裏引用了當前目錄的run.rst,如今從新生成html,就會看到頁面顯示上的變化了。