Linux中國

如何使用 Sphinx 給 Python 代碼寫文檔

Python 代碼可以在源碼中包含文檔。這種方式默認依靠 docstring,它以三引號格式定義。雖然文檔的價值是很大的,但是沒有充足的文檔的代碼還是很常見。讓我們演練一個場景,了解出色的文檔的強大功能。

經歷了太多在白板技術面試上要求你實現斐波那契數列,你已經受夠了。你回家用 Python 寫了一個可重用的斐波那契計算器,使用浮點技巧來實現 O(1) 複雜度。

代碼很簡單:

# fib.py
import math

_SQRT_5 = math.sqrt(5)
_PHI = (1 + _SQRT_5) / 2

def approx_fib(n):
    return round(_PHI**(n+1) / _SQRT_5)

(該斐波那契數列是四捨五入到最接近的整數的幾何序列,這是我最喜歡的鮮為人知的數學事實之一。)

作為一個好人,你可以將代碼開源,並將它放在 PyPI 上。setup.py 文件很簡單:

import setuptools

setuptools.setup(
    name='fib',
    version='2019.1.0',
    description='Fibonacci',
    py_modules=["fib"],
)

但是,沒有文檔的代碼是沒有用的。因此,你可以向函數添加 docstring。我最喜歡的 docstring 樣式之一是 「Google」 樣式。標記很輕量,當它放在源代碼中時很好。

def approx_fib(n):
    """
    Approximate Fibonacci sequence

    Args:
        n (int): The place in Fibonacci sequence to approximate

    Returns:
        float: The approximate value in Fibonacci sequence
    """
    # ...

但是函數的文檔只是成功的一半。普通文檔對於情境化代碼用法很重要。在這種情況下,情景是惱人的技術面試。

有一種添加更多文檔的方式,專業 Python 人的方式通常是在 docs/ 添加 rst 文件( reStructuredText 的縮寫)。因此 docs/index.rst 文件最終看起來像這樣:

Fibonacci
=========

Are you annoyed at tech interviewers asking you to implement
the Fibonacci sequence?
Do you want to have some fun with them?
A simple
:code:`pip install fib`
is all it takes to tell them to,
um,
fib off.

.. automodule:: fib
   :members:

我們完成了,對吧?我們已經將文本放在了文件中。人們應該會看的。

使 Python 文檔更漂亮

為了使你的文檔看起來更漂亮,你可以利用 Sphinx,它旨在製作漂亮的 Python 文檔。這三個 Sphinx 擴展特別有用:

  • sphinx.ext.autodoc:從模塊內部獲取文檔
  • sphinx.ext.napoleon:支持 Google 樣式的 docstring
  • sphinx.ext.viewcode:將 ReStructured Text 源碼與生成的文檔打包在一起

為了告訴 Sphinx 該生成什麼以及如何生成,我們在 docs/conf.py 中配置一個輔助文件:

extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.napoleon',
    'sphinx.ext.viewcode',
]
# 該入口點的名稱,沒有 .rst 擴展名。
# 慣例該名稱是 index
master_doc = "index"
# 這些值全部用在生成的文檔當中。
# 通常,發布(release)與版本(version)是一樣的,
# 但是有時候我們會有帶有 rc 標籤的發布。
project = "Fib"
copyright = "2019, Moshe Zadka"
author = "Moshe Zadka"
version = release = "2019.1.0"

此文件使我們可以使用所需的所有元數據來發布代碼,並注意擴展名(上面的注釋說明了方式)。最後,要確保生成我們想要的文檔,請使用 Tox 管理虛擬環境以確保我們順利生成文檔:

[tox]
# 默認情況下,`.tox` 是該目錄。
# 將其放在非點文件中可以從
# 文件管理器或瀏覽器的
# 打開對話框中打開生成的文檔,
# 這些對話框有時會隱藏點文件。
toxworkdir = {toxinidir}/build/tox

[testenv:docs]
# 從 `docs` 目錄內運行 `sphinx`,
# 以確保它不會拾取任何可能進入頂層目錄下的
# 虛擬環境或 `build/` 目錄下的其他工件的雜散文件。
changedir = docs
# 唯一的依賴關係是 `sphinx`。
# 如果我們使用的是單獨打包的擴展程序,
# 我們將在此處指定它們。
# 更好的做法是指定特定版本的 sphinx。
deps =
    sphinx
# 這是用於生成 HTML 的 `sphinx` 命令。
# 在其他情況下,我們可能想生成 PDF 或電子書。
commands =
    sphinx-build -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html
# 我們使用 Python 3.7。
# Tox 有時會根據 testenv 的名稱嘗試自動檢測它,
# 但是 `docs` 沒有給出有用的線索,因此我們必須明確它。
basepython = python3.7

現在,無論何時運行 Tox,它都會為你的 Python 代碼生成漂亮的文檔。

在 Python 中寫文檔很好

作為 Python 開發人員,我們可以使用的工具鏈很棒。我們可以從 docstring 開始,添加 .rst 文件,然後添加 Sphinx 和 Tox 來為用戶美化結果。

你對好的文檔有何評價?你還有其他喜歡的方式么?請在評論中分享它們!

via: https://opensource.com/article/19/11/document-python-sphinx

作者:Moshe Zadka 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    捐贈 Let's Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...