Python 這個庫可快速生成文檔

Sphinx 簡介

Sphinx 是一種工具,是一個有趣 python 的第三方庫,它允許程序員以純文本格式編寫文檔,Spninx 可以輕鬆生成各種格式的輸出,比如 html,pfd,等等。純文本的文檔方便使用版本管理工具進行跟蹤。純文本文檔對不同系統之間的協作者也非常有用,純文本是當前可以採用的最便捷的格式之一,不然 markdown 格式咋那麼火呢,不是沒有道理的。

程序員最討厭的兩件事:

  1. 自己寫代碼文檔

  2. 別人的代碼沒文檔

正經寫文檔確實麻煩,爲啥麻煩呢?因爲很長時間程序員寫代碼和寫文檔是完全獨立分開的,這說起來就是兩份工作量,最不能忍受的還是變化帶來的負擔,代碼是可能經常變動的,代碼變動之後,含義自然就可能不一樣,或者新加了了功能,文檔如果還要手動跟進的話,最喜歡偷懶的程序員自然就不願了。

我們迴歸本源,程序員這討厭的兩件事說明了什麼?

心有餘而力不足。心裏還是想寫文檔的,就是太累了。

所以,對此我們有解決方案嗎?

有,最核心的就是代碼即文檔,根據代碼來生成文檔

這個 golang 在語言工具包裏就整合了 go doc 這樣的工具,能夠根據代碼和代碼裏的註釋生成一個漂亮的文檔。

Python 也有自己的方案,解決文檔就是 Sphinx ,Python3.x 官方的文檔就是用這個生成的。所以,如果你的也是 Python 項目,那麼可以生成一個和官方文檔同款的文檔項目,非常實用和拉風。

Sphinx 怎麼用?

先給大家看一張我本地生成文檔項目的圖,提提興趣:

使用這個小工具,你就不用專門寫文檔項目了,只需要寫好代碼就好,代碼即文檔。

安裝 sphinx 庫

安裝非常方便,就是一個簡單的 Python 三方庫,用 pip 安裝就行了:

pip install Sphinx

安裝完之後呢,應該有四個二進制文件:

如果呢,你沒有找到這四個二進制文件,那麼可以直接去找對應的 python 文件:

簡單示例( Spninx 使用 )

搞了一個最簡單的示例,項目根目錄是 ~/qiya/python-tools/ ,下面都是以此目錄爲基礎,下面的是我自己創建的目錄,搞了幾個簡單的目錄,commonmisc 是項目的代碼目錄,docs 是我預定的專門放文檔的目錄。

root@ubuntu:~/qiya/python-tools# tree 
.
├── common
│   ├── demo.py
│   └── __init__.py
├── docs
│   └── __init__.py
├── misc
│   └── __init__.py
│   └── tools.py
└── README.md

我先準備好演示用的代碼項目:

demo 類文件:

tools 函數文件:

步驟一:Sphinx 創建出基礎配置

執行 sphinx-quickstart

使用sphinx-quickstart 可以直接做初始化,能夠完成最簡單的配置,生成一些最基礎的配置文件。

$ cd docs/
$ sphinx-quickstart

執行完這個命令,需要配置一些操作,信息如下:

sphinx-quickstart 命令執行完成之後,下面全都是自動生成的文件:

root@ubuntu:~/qiya/python-tools/docs# tree 
.
├── build
├── __init__.py
├── make.bat
├── Makefile
└── source
    ├── conf.py
    ├── index.rst
    ├── _static
    └── _templates

特意說下,最重要的就是兩個文件

  1. source/conf.py  :這個是 Sphinx 的配置,包括主題的設置,文檔的生成形式,都可以在這裏配置;

  2. source/index.rst :這個是項目的主頁文件,rst 語法,類似於 markdown,都是一種標記類文檔語言;

sphinx-quickstart 執行完之後呢,基礎的東西是給你準備好了,接下來就是要根據自身的情況來配置。首先要看的就是 conf.py 這個配置文件,我們的目錄是:

root@ubuntu:~/qiya/python-tools# tree 
.
├── common
│   ├── demo.py
│   └── __init__.py
├── docs
│   ├── build
│   ├── __init__.py
│   ├── make.bat
│   ├── Makefile
│   └── source
│       ├── conf.py
│       ├── index.rst
│       ├── _static
│       └── _templates
├── misc
│   ├── __init__.py
│   └── tools.py
└── README.md

配置 conf.py 文件

所以呢,我們要讓 conf.py 找到代碼,那麼就要添加好路徑,在最開頭修改,如下:

import sys
from os.path import abspath, dirname
# 爲什麼是上三層目錄呢?conf.py 這個文件和根目錄不就隔着三層目錄嘛
sys.path.insert(0, dirname(dirname(dirname(abspath(__file__)))))

這樣 Sphinx 就能找到你想要自動生成文檔的代碼了。下一步,添加 extensions ,說明咱們的文檔可以自動生成:

# 指明用 autodoc 的形式生成
extensions = [
        'sphinx.ext.autodoc'
]
# 指明用 sphinx_rtd_theme
html_theme = 'sphinx_rtd_theme'

sphinx_rtd_theme  這個主題不是默認的,這個是一個比較好看的主題,這個可以直接用 pip 安裝即可:

$ pip install sphinx_rtd_theme

conf.py 修改的樣子如下:

步驟二:配置項目入口 index.rst

這個 index.rst 文件是入口,項目文檔怎麼生成,生成什麼格式,就是這個文件裏配置的(這裏的配置是要和 conf 對應着來)。

************
Demo
************
common 公共庫
=================
.. automodule:: common.demo
   :members:
misc 
=================
.. automodule:: misc.tools
   :members:

解釋下,這裏的 common.demomisc.tools 模塊對應了 py 文件。這個怎麼才能找到這兩個模塊,這個就跟你配置 conf.py 裏面的 path 配置有關。

步驟三:生成項目文檔

執行命令:

$ cd docs/
$ sphinx-build source/ build/

執行這個命令,就會自動去搜索代碼,生成文檔項目,默認生成的是 html 的文件。

這裏順帶提一下,如果你想生成其他格式的項目文檔,比如純文本格式,那麼可以執行:

$ cd docs/
$ sphinx-build -b text source/ build/

純文本格式如下:

步驟四:展示出來

怎麼看到效果呢?演示的話,開一個靜態服務器就行,給大家演示一個 python 3 一鍵起一個靜態服務器的命令:

$ python3 -m http.server 9000

顯示效果:

小小總結

希望大家寫好代碼,名字易讀,註釋規範,這樣就自然有好的文檔了。還有就是,這個 Sphinx 工具其實不僅適用於 Python,其他語言也能適用,大家可以探索。關鍵思考:代碼即文檔

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/1wDHw0p1Tf3fMCdBk6cyhQ