<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>文档与标注 on 扎塔-Zata</title><link>https://www.zata.cc/tags/%E6%96%87%E6%A1%A3%E4%B8%8E%E6%A0%87%E6%B3%A8/</link><description>Recent content in 文档与标注 on 扎塔-Zata</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>扎塔-Zata</copyright><lastBuildDate>Thu, 24 Sep 2026 17:09:06 +0800</lastBuildDate><atom:link href="https://www.zata.cc/tags/%E6%96%87%E6%A1%A3%E4%B8%8E%E6%A0%87%E6%B3%A8/index.xml" rel="self" type="application/rss+xml"/><item><title>数据集标注工具</title><link>https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/</link><pubDate>Mon, 29 Dec 2025 15:05:31 +0800</pubDate><guid>https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/</guid><description>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/index.png" alt="Featured image of post 数据集标注工具" />&lt;h2 id="ubiai">ubiai
&lt;/h2>&lt;p>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-2.png"
width="1897"
height="954"
srcset="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-2_hu6349620373133293598.png 480w, https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-2_hu10539449810666814483.png 1024w"
loading="lazy"
alt="ubiai"
class="gallery-image"
data-flex-grow="198"
data-flex-basis="477px"
>&lt;/p>
&lt;h2 id="labelstudio">LabelStudio
&lt;/h2>&lt;p>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-1.png"
width="1902"
height="954"
srcset="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-1_hu6195940971100767588.png 480w, https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-1_hu234587087617983565.png 1024w"
loading="lazy"
alt="LabelStudio"
class="gallery-image"
data-flex-grow="199"
data-flex-basis="478px"
>&lt;/p>
&lt;h3 id="install">install
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sh" data-lang="sh">&lt;span class="line">&lt;span class="cl">docker run -it -p 8080:8080 -v %cd%/mydata:/label-studio/data heartexlabs/label-studio:latest label-studio --log-level DEBUG
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>-v %cd%/mydata:/label-studio/data
挂载本地目录到容器中，实现数据持久化。
%cd%：这是 Windows 命令行中的变量，表示当前目录（在 Linux/macOS 中应写作 $(pwd)）。
所以 %cd%/mydata 指的是你当前文件夹下的 mydata 子目录。
它被挂载到容器内的 /label-studio/data 路径。&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image.png"
width="1113"
height="626"
srcset="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image_hu6367888544225471471.png 480w, https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image_hu6089378773352114304.png 1024w"
loading="lazy"
alt="在我的指定目录下安装"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
>&lt;/p></description></item><item><title>生成api文档工具的简易使用</title><link>https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/</link><pubDate>Sat, 03 May 2025 10:42:53 +0800</pubDate><guid>https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/</guid><description>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/index.png" alt="Featured image of post 生成api文档工具的简易使用" />&lt;h2 id="api文档的必要性">api文档的必要性
&lt;/h2>&lt;p>虽然我一直在写python项目，也并没有前后端的区别，但是随着项目越变越大，越发感觉没有api文档，对于我的回顾来说是非常麻烦的，因此还是需要一个用于生成api的python插件或者说一个用于书写api文档的在线或离线工具，之前是有用过Sphinx来自动生成api文档，但是感觉存在使用太麻烦的问题，如果是小项目，可能配置都感觉很麻烦，书写格式，似乎有md格式可以使用，但是我还没有去尝试，使用了它默认的格式，头都昏了&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image.png"
width="1013"
height="918"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image_hu16396331019311804839.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image_hu10206413274038761565.png 1024w"
loading="lazy"
alt="如图"
class="gallery-image"
data-flex-grow="110"
data-flex-basis="264px"
>&lt;/p>
&lt;h2 id="那些api文档工具可以使用">那些api文档工具可以使用
&lt;/h2>&lt;p>我只是做了简单的了解，太具体的深度还没有做。&lt;/p>
&lt;ol>
&lt;li>Sphinx 也就是我上面说到了，我只使用了python版本的，感觉并不是特别好用的&lt;/li>
&lt;li>MkDocs 这个是一个比较新的框架，也是比较现代的版本&lt;/li>
&lt;li>fastopenapi 这个是专门用于生成fastapi后端的项目&lt;a class="link" href="https://github.com/mr-fatalyst/fastopenapi" target="_blank" rel="noopener"
>项目地址&lt;/a>&lt;/li>
&lt;/ol>
&lt;h2 id="具体工具使用">具体工具使用
&lt;/h2>&lt;h3 id="sphinx">Sphinx
&lt;/h3>&lt;p>以我的fainigleam项目为例
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-1.png"
width="960"
height="1032"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-1_hu6351032501117944637.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-1_hu12307142582688572315.png 1024w"
loading="lazy"
alt="faintgleam项目"
class="gallery-image"
data-flex-grow="93"
data-flex-basis="223px"
>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir docs &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nb">cd&lt;/span> docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-quickstart &lt;span class="c1"># 第一个选y，后面看着填&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vim source/conf.py &lt;span class="c1"># 具体怎么改看下面&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vim source/index.rst &lt;span class="c1"># 具体怎么改看下面&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o ./source ../src
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol>
&lt;li>创建docs文件夹，并cd进去
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-2.png"
width="432"
height="31"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-2_hu6894374485765469759.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-2_hu17530737495040045654.png 1024w"
loading="lazy"
alt="创建文件夹"
class="gallery-image"
data-flex-grow="1393"
data-flex-basis="3344px"
>&lt;/li>
&lt;/ol>
&lt;p>2.sphinx-quickstart
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-3.png"
width="762"
height="709"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-3_hu11256109789496518278.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-3_hu14828200606707051375.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="107"
data-flex-basis="257px"
>&lt;/p>
&lt;p>3.修改 &lt;code>source/conf.py&lt;/code>文件&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># conf.py&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../../&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 添加项目根目录到路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../../src/&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 添加src目录到路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#######################################&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">project&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;XXXXX&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">copyright&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;XXXXXX&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">author&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;XXXXX&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">release&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;X.X.X&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#######################################&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 自动从docstrings生成文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.viewcode&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 添加查看源码的链接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.napoleon&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 支持Google风格的文档字符串&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 配置autodoc扩展&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">autodoc_member_order&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;bysource&amp;#39;&lt;/span> &lt;span class="c1"># 按源码顺序记录成员&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">add_module_names&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">False&lt;/span> &lt;span class="c1"># 不在API文档中添加模块名&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">templates_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_templates&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">exclude_patterns&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">language&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;zh&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_theme&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;sphinx_rtd_theme&amp;#39;&lt;/span> &lt;span class="c1"># 使用ReadTheDocs主题&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_static_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_static&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-4.png"
width="765"
height="701"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-4_hu12315155760379729029.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-4_hu11131886743594311540.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="109"
data-flex-basis="261px"
>&lt;/p>
&lt;ol start="4">
&lt;li>修改 &lt;code>source/index.rst&lt;/code>文件&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">########################################################&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="gh">fainitgleam documentation&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">=============&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">toctree&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:maxdepth:&lt;/span> &lt;span class="nf">2&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:caption:&lt;/span> &lt;span class="nf">Contents:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>#########################################################&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span># 前面都不变的，就这里增加一个modules&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> modules&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-5.png"
width="758"
height="440"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-5_hu16846302107065695246.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-5_hu6333555567195019507.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="172"
data-flex-basis="413px"
>&lt;/p>
&lt;ol start="5">
&lt;li>
&lt;p>执行&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o ./source ../src
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-6.png"
width="770"
height="903"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-6_hu2104631240578414274.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-6_hu268330711024136087.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="85"
data-flex-basis="204px"
>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>make html&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-7.png"
width="767"
height="1404"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-7_hu2564385545487818632.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-7_hu9455714535073148653.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="54"
data-flex-basis="131px"
>&lt;/p>
&lt;p>7.就可以打开静态页面查看了&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-8.png"
width="950"
height="946"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-8_hu10550301209957985571.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-8_hu5016608727676764371.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="241px"
>
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-9.png"
width="950"
height="946"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-9_hu8490329571251187602.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-9_hu16874039654587338327.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="241px"
>
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-10.png"
width="950"
height="946"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-10_hu7237164734695653979.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-10_hu9175922789498292873.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="241px"
>&lt;/p>
&lt;h3 id="mkdocs">MkDocs
&lt;/h3>&lt;p>在为Python项目选择一个可以长期使用的文档工具时，我们追求的是&lt;strong>易用性&lt;/strong>、&lt;strong>专业外观&lt;/strong>和&lt;strong>强大功能&lt;/strong>的最佳平衡。综合考量，2025年的最佳选择是 &lt;strong>MkDocs&lt;/strong> 配合 &lt;strong>Material for MkDocs&lt;/strong> 主题及 &lt;strong>mkdocstrings&lt;/strong> 插件。这个组合将成为你未来所有项目的首选。&lt;/p>
&lt;h4 id="为什么是这个组合">为什么是这个组合？
&lt;/h4>&lt;ul>
&lt;li>&lt;strong>现代且极其易用&lt;/strong>：你只需使用最熟悉的 &lt;strong>Markdown&lt;/strong> 语言来编写文档，几乎没有学习成本。通过&lt;code>mkdocs serve&lt;/code>命令即可开启实时预览，大大提升了编写效率和体验。&lt;/li>
&lt;li>&lt;strong>专业且外观精美&lt;/strong>：&lt;strong>Material for MkDocs&lt;/strong> 是一个功能极其强大的主题，能让你用最简单的配置，生成世界级的、响应式的现代化文档网站。内置搜索、深/浅色模式切换、代码高亮等功能一应俱全。&lt;/li>
&lt;li>&lt;strong>功能强大，足以应对未来需求&lt;/strong>：通过 &lt;strong>mkdocstrings&lt;/strong> 插件，它可以直接读取你代码中的文档字符串（docstrings），自动生成清晰、美观的API参考文档，完美解决了API文档的需求。&lt;/li>
&lt;/ul>
&lt;p>简单来说，这个组合让你用最简单的方式，获得专业级的输出，是兼顾了现在与未来的理想选择。&lt;/p>
&lt;h4 id="快速上手指南">快速上手指南
&lt;/h4>&lt;p>只需四步，即可搭建并运行你的专业文档网站。&lt;/p>
&lt;p>&lt;strong>1. 安装必要的库&lt;/strong>&lt;/p>
&lt;p>在你的终端中运行以下命令：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">uv install mkdocs mkdocs-material mkdocstrings-python
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>2. 创建新项目&lt;/strong> （如果还没有软件项目）&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdocs new my-project
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> my-project
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>如果已有软件项目&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建 docs 文件夹，用于存放所有 .md 文档文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建 mkdocs.yml 配置文件，它将位于项目根目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">touch mkdocs.yml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建一个首页文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">touch docs/index.md
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这会创建一个名为 &lt;code>my-project&lt;/code> 的新目录，包含一个基础的 &lt;code>mkdocs.yml&lt;/code> 配置文件和一个 &lt;code>docs&lt;/code> 目录（用于存放你的Markdown文档）。&lt;/p>
&lt;p>&lt;strong>3. 配置 &lt;code>mkdocs.yml&lt;/code> 文件&lt;/strong>&lt;/p>
&lt;p>这是最关键的一步。用以下内容替换 &lt;code>mkdocs.yml&lt;/code> 文件的全部内容，这是一个包含了主题、API文档生成和中文支持的黄金配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 网站名称&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">site_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;我的项目名称&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">site_description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;项目的简短描述&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 主题配置&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">theme&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">material&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">language&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">zh&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 设置语言为中文&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">features&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">navigation.tabs&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 导航栏使用标签页&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">navigation.sections&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 左侧导航支持章节收起&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">content.code.copy&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 代码块支持一键复制&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">content.code.annotate&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 支持代码块注释&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">search.suggest&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 搜索时提供建议&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">search.highlight&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 高亮搜索结果&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">palette&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 调色盘，用于实现深/浅色模式切换&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">scheme&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">default&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">toggle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">icon&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">material/brightness-7&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">切换到深色模式&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">scheme&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">slate&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">toggle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">icon&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">material/brightness-4&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">切换到浅色模式&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 插件配置&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">plugins&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">search&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 内置搜索插件&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">mkdocstrings&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># API文档生成插件&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">handlers&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">python&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 指定处理Python代码&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">options&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">show_root_heading&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 为模块显示一个顶层标题&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 导航栏配置&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">nav&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">首页&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">index.md&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">API 参考&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">&amp;#39;模块A&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;api/module_a.md&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">&amp;#39;模块B&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;api/module_b.md&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">指南&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">&amp;#39;安装指南&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;guides/installation.md&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>4. 编写内容并运行&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>在 &lt;code>docs/&lt;/code> 目录下创建和编辑你的 &lt;code>.md&lt;/code> 文件。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>例如，在 &lt;code>docs/api/module_a.md&lt;/code> 文件中，你只需写入以下一行代码，&lt;code>mkdocstrings&lt;/code>就会自动为你生成整个模块的API文档：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">::: my_project.module_a
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>(请将 &lt;code>my_project.module_a&lt;/code> 替换为你的实际Python模块路径)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>在项目根目录下运行服务：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdocs serve
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;p>现在，打开浏览器访问 &lt;code>http://127.0.0.1:8000&lt;/code>，即可看到你专业、美观且功能强大的文档网站。&lt;/p>
&lt;h4 id="其他选择何时考虑">其他选择（何时考虑？）
&lt;/h4>&lt;ul>
&lt;li>&lt;strong>Sphinx&lt;/strong>：当你需要为一个极其庞大、复杂的传统开源库（如Python官方文档本身）构建文档，且需要PDF/ePub等多种输出格式时，可以考虑它。但请准备好应对其更陡峭的学习曲线（reStructuredText语法）。&lt;/li>
&lt;li>&lt;strong>pdoc&lt;/strong>：当你的需求&lt;strong>仅仅&lt;/strong>是快速、零配置地从代码生成一个纯API参考页面，而不需要任何额外的教程或指南时，pdoc是一个轻量级的选择。&lt;/li>
&lt;/ul></description></item><item><title>Sphinx-快速生成python项目的api文档</title><link>https://www.zata.cc/p/sphinx-%E5%BF%AB%E9%80%9F%E7%94%9F%E6%88%90python%E9%A1%B9%E7%9B%AE%E7%9A%84api%E6%96%87%E6%A1%A3/</link><pubDate>Tue, 18 Mar 2025 00:16:22 +0800</pubDate><guid>https://www.zata.cc/p/sphinx-%E5%BF%AB%E9%80%9F%E7%94%9F%E6%88%90python%E9%A1%B9%E7%9B%AE%E7%9A%84api%E6%96%87%E6%A1%A3/</guid><description>&lt;img src="https://www.zata.cc/p/sphinx-%E5%BF%AB%E9%80%9F%E7%94%9F%E6%88%90python%E9%A1%B9%E7%9B%AE%E7%9A%84api%E6%96%87%E6%A1%A3/images/index/index.png" alt="Featured image of post Sphinx-快速生成python项目的api文档" />&lt;!-- ![alt text](images/index/index.png) -->
&lt;hr>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 初始化一个新的 Sphinx 项目&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-quickstart
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 HTML 文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 清空构建目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make clean
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 PDF 文档（需要安装 LaTeX）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make latexpdf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成单页 HTML 文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make singlehtml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检查 reStructuredText 格式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 启动本地服务器预览文档（需安装 sphinx-autobuild）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-autobuild &lt;span class="nb">source&lt;/span> build/html
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 API 文档（需配置 sphinx-apidoc）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o source/ &amp;lt;module_path&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 构建并检查链接有效性&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make linkcheck
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>下面是conf.py文件的参考配置，此外你还需要在index.rst文件的最后一行增加文字即modules&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># conf.py &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../../&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 添加项目根目录到路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../../src/&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 添加src目录到路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">project&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;fainitgleam&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">copyright&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;2025, zata&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">author&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;zata&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">release&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;1.3.0&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># -- General configuration ---------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 自动从docstrings生成文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.viewcode&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 添加查看源码的链接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.napoleon&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 支持Google风格的文档字符串&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 配置autodoc扩展&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">autodoc_member_order&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;bysource&amp;#39;&lt;/span> &lt;span class="c1"># 按源码顺序记录成员&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">add_module_names&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">False&lt;/span> &lt;span class="c1"># 不在API文档中添加模块名&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">templates_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_templates&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">exclude_patterns&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">language&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;zh&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_theme&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;sphinx_rtd_theme&amp;#39;&lt;/span> &lt;span class="c1"># 使用ReadTheDocs主题&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_static_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_static&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="sphinx-使用教程">Sphinx 使用教程
&lt;/h1>&lt;p>Sphinx 是一个功能强大的 Python 文档生成工具，广泛用于生成 Python 项目的技术文档、API 文档以及其他类型的文档。它支持 reStructuredText（reST）格式，并可以输出 HTML、PDF、ePub 等多种格式。本教程将详细介绍如何安装、配置和使用 Sphinx 生成专业文档。&lt;/p>
&lt;hr>
&lt;h2 id="1-安装-sphinx">1. 安装 Sphinx
&lt;/h2>&lt;h3 id="11-前提条件">1.1 前提条件
&lt;/h3>&lt;ul>
&lt;li>确保已安装 Python（建议使用 Python 3.6 或更高版本）。&lt;/li>
&lt;li>安装 &lt;code>pip&lt;/code>，Python 的包管理工具。&lt;/li>
&lt;/ul>
&lt;h3 id="12-安装-sphinx">1.2 安装 Sphinx
&lt;/h3>&lt;p>在终端运行以下命令安装 Sphinx：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install sphinx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="13-验证安装">1.3 验证安装
&lt;/h3>&lt;p>安装完成后，检查 Sphinx 是否正确安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-build --version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出类似 &lt;code>sphinx-build 4.x.x&lt;/code>，表示安装成功。&lt;/p>
&lt;h3 id="14-可选安装主题">1.4 可选：安装主题
&lt;/h3>&lt;p>Sphinx 默认主题较为简单，可以安装更现代化的主题，如 Read the Docs 风格的主题：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install sphinx-rtd-theme
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="2-创建-sphinx-项目">2. 创建 Sphinx 项目
&lt;/h2>&lt;h3 id="21-初始化项目">2.1 初始化项目
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>创建一个项目目录（例如 &lt;code>my-docs&lt;/code>）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir my-docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> my-docs
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>运行 &lt;code>sphinx-quickstart&lt;/code> 初始化 Sphinx 项目：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-quickstart
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>回答交互式问题：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Separate source and build directories&lt;/strong>: 推荐选择 &lt;code>y&lt;/code>，将源文件和构建输出分开。&lt;/li>
&lt;li>&lt;strong>Project name&lt;/strong>: 输入项目名称，例如 &lt;code>My Project&lt;/code>。&lt;/li>
&lt;li>&lt;strong>Author name(s)&lt;/strong>: 输入作者姓名。&lt;/li>
&lt;li>&lt;strong>Project release&lt;/strong>: 输入版本号，例如 &lt;code>1.0&lt;/code>。&lt;/li>
&lt;li>&lt;strong>Language&lt;/strong>: 输入文档语言（默认 &lt;code>en&lt;/code>，中文可输入 &lt;code>zh_CN&lt;/code>）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>完成后，Sphinx 会生成以下文件结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">my-docs/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── build/ # 构建输出目录
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── source/ # 源文件目录
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── conf.py # Sphinx 配置文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── index.rst # 主文档文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── _static/ # 静态文件（如 CSS、图片）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── _templates/ # 模板文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── Makefile # 用于 Linux/Mac 的构建脚本
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── make.bat # 用于 Windows 的构建脚本
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="3-配置-sphinx">3. 配置 Sphinx
&lt;/h2>&lt;h3 id="31-编辑-confpy">3.1 编辑 &lt;code>conf.py&lt;/code>
&lt;/h3>&lt;p>&lt;code>conf.py&lt;/code> 是 Sphinx 的核心配置文件，位于 &lt;code>source/&lt;/code> 目录下。以下是一些常用配置项：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>项目信息&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">project&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;My Project&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">author&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;Your Name&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">release&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;1.0&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>语言设置&lt;/strong>（中文文档）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">language&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;zh_CN&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>主题设置&lt;/strong>（使用 Read the Docs 主题）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_theme&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;sphinx_rtd_theme&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>扩展启用&lt;/strong>：
Sphinx 支持多种扩展，常用扩展包括：&lt;/p>
&lt;ul>
&lt;li>&lt;code>sphinx.ext.autodoc&lt;/code>: 自动生成 Python 代码的 API 文档。&lt;/li>
&lt;li>&lt;code>sphinx.ext.napoleon&lt;/code>: 支持 Google/Numpy 风格的文档字符串。&lt;/li>
&lt;li>&lt;code>sphinx.ext.viewcode&lt;/code>: 显示源代码链接。&lt;/li>
&lt;/ul>
&lt;p>在 &lt;code>conf.py&lt;/code> 中启用扩展：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.napoleon&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.viewcode&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>静态文件路径&lt;/strong>：
默认情况下，&lt;code>_static&lt;/code> 和 &lt;code>_templates&lt;/code> 路径已配置好，确保不要修改：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_static_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_static&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h3 id="32-设置中文支持">3.2 设置中文支持
&lt;/h3>&lt;p>如果文档使用中文，确保 &lt;code>language = 'zh_CN'&lt;/code>，并安装支持中文的主题（如 &lt;code>sphinx-rtd-theme&lt;/code>）。此外，推荐使用 UTF-8 编码保存所有 &lt;code>.rst&lt;/code> 文件。&lt;/p>
&lt;hr>
&lt;h2 id="4-编写文档">4. 编写文档
&lt;/h2>&lt;p>Sphinx 使用 reStructuredText（reST）作为默认标记语言，类似于 Markdown 但更适合技术文档。&lt;/p>
&lt;h3 id="41-编辑-indexrst">4.1 编辑 &lt;code>index.rst&lt;/code>
&lt;/h3>&lt;p>&lt;code>index.rst&lt;/code> 是文档的入口文件。默认内容如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">.. My Project documentation master file
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="gh">Welcome to My Project&amp;#39;s documentation!&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">=====================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="p">..&lt;/span> &lt;span class="ow">toctree&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:maxdepth:&lt;/span> &lt;span class="nf">2&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:caption:&lt;/span> &lt;span class="nf">Contents:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="gh">Indices and tables&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">==================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="m">*&lt;/span> &lt;span class="na">:ref:&lt;/span>&lt;span class="nv">`genindex`&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="m">*&lt;/span> &lt;span class="na">:ref:&lt;/span>&lt;span class="nv">`modindex`&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="m">*&lt;/span> &lt;span class="na">:ref:&lt;/span>&lt;span class="nv">`search`&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>标题&lt;/strong>：使用 &lt;code>=&lt;/code>、&lt;code>-&lt;/code>、&lt;code>~&lt;/code> 等符号创建标题层级。&lt;/li>
&lt;li>&lt;strong>目录树（toctree）&lt;/strong>：使用 &lt;code>.. toctree::&lt;/code> 指令添加子页面，例如：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">toctree&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:maxdepth:&lt;/span> &lt;span class="nf">2&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:caption:&lt;/span> &lt;span class="nf">Contents:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> intro&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> api&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>这里 &lt;code>intro&lt;/code> 和 &lt;code>api&lt;/code> 对应 &lt;code>intro.rst&lt;/code> 和 &lt;code>api.rst&lt;/code> 文件。&lt;/li>
&lt;/ul>
&lt;h3 id="42-创建新页面">4.2 创建新页面
&lt;/h3>&lt;p>在 &lt;code>source/&lt;/code> 目录下创建新的 &lt;code>.rst&lt;/code> 文件，例如 &lt;code>intro.rst&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="gh">Introduction&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">============&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>This is the introduction to My Project.&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="p">..&lt;/span> &lt;span class="ow">note&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> This is a note directive to highlight important information.&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>将新文件添加到 &lt;code>index.rst&lt;/code> 的 &lt;code>toctree&lt;/code> 中。&lt;/p>
&lt;h3 id="43-常用-rest-语法">4.3 常用 reST 语法
&lt;/h3>&lt;ul>
&lt;li>
&lt;p>&lt;strong>粗体/斜体&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="gs">**bold text**&lt;/span> &lt;span class="ge">*italic text*&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>代码块&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">code-block&lt;/span>&lt;span class="p">::&lt;/span> &lt;span class="k">python&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">hello&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Hello, Sphinx!&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>链接&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="s">`Sphinx 官网 &lt;/span>&lt;span class="si">&amp;lt;https://www.sphinx-doc.org&amp;gt;&lt;/span>&lt;span class="s">`_&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>列表&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="m">-&lt;/span> Item 1&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="m">-&lt;/span> Item 2&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> - Subitem&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="5-生成文档">5. 生成文档
&lt;/h2>&lt;h3 id="51-构建-html-文档">5.1 构建 HTML 文档
&lt;/h3>&lt;p>在项目根目录运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>输出文件将生成在 &lt;code>build/html/&lt;/code> 目录下。&lt;/li>
&lt;li>打开 &lt;code>build/html/index.html&lt;/code> 查看生成的文档。&lt;/li>
&lt;/ul>
&lt;h3 id="52-清理构建">5.2 清理构建
&lt;/h3>&lt;p>如果需要重新构建，清理旧输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make clean
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="53-其他格式">5.3 其他格式
&lt;/h3>&lt;p>Sphinx 支持多种输出格式，例如 PDF（需要安装 &lt;code>latexmk&lt;/code> 和 TeX 环境）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make latexpdf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="6-自动生成-api-文档">6. 自动生成 API 文档
&lt;/h2>&lt;p>如果你的项目包含 Python 代码，可以使用 &lt;code>sphinx.ext.autodoc&lt;/code> 自动生成 API 文档。&lt;/p>
&lt;h3 id="61-配置-autodoc">6.1 配置 autodoc
&lt;/h3>&lt;p>确保 &lt;code>conf.py&lt;/code> 已启用 &lt;code>sphinx.ext.autodoc&lt;/code> 和 &lt;code>sphinx.ext.napoleon&lt;/code>。&lt;/p>
&lt;h3 id="62-创建-python-模块">6.2 创建 Python 模块
&lt;/h3>&lt;p>假设你的项目有一个 Python 模块 &lt;code>my_module.py&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">greet&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;Greet someone.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> Args:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> name (str): The name of the person to greet.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> Returns:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> str: A greeting message.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Hello, &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="63-生成-api-文档">6.3 生成 API 文档
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>创建 &lt;code>api.rst&lt;/code> 文件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="gh">API Documentation&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">=================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="p">..&lt;/span> &lt;span class="ow">automodule&lt;/span>&lt;span class="p">::&lt;/span> my_module&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:undoc-members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:show-inheritance:&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>将 &lt;code>api.rst&lt;/code> 添加到 &lt;code>index.rst&lt;/code> 的 &lt;code>toctree&lt;/code>。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>确保 &lt;code>my_module.py&lt;/code> 在 Python 路径中，可以通过修改 &lt;code>conf.py&lt;/code> 添加模块路径：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>重新构建文档：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="7-发布文档">7. 发布文档
&lt;/h2>&lt;h3 id="71-本地查看">7.1 本地查看
&lt;/h3>&lt;p>直接打开 &lt;code>build/html/index.html&lt;/code> 查看生成的文档。&lt;/p>
&lt;h3 id="72-托管到-read-the-docs">7.2 托管到 Read the Docs
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>将项目推送到 GitHub/GitLab。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>登录 &lt;a class="link" href="https://readthedocs.org/" target="_blank" rel="noopener"
>Read the Docs&lt;/a>，导入你的项目。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>配置 Read the Docs 自动构建，需在项目根目录添加 &lt;code>.readthedocs.yml&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">2&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">build&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">os&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ubuntu-22.04&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">tools&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">python&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;3.10&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">python&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">install&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">requirements&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">requirements.txt&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>在 &lt;code>requirements.txt&lt;/code> 中列出依赖：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">sphinx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-rtd-theme
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h3 id="73-其他托管方式">7.3 其他托管方式
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>GitHub Pages&lt;/strong>：将 &lt;code>build/html/&lt;/code> 内容部署到 GitHub Pages。&lt;/li>
&lt;li>&lt;strong>Netlify&lt;/strong>：配置 Netlify 自动构建 &lt;code>make html&lt;/code>。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="8-实用技巧">8. 实用技巧
&lt;/h2>&lt;h3 id="81-自定义主题">8.1 自定义主题
&lt;/h3>&lt;p>在 &lt;code>_static/&lt;/code> 目录下添加自定义 CSS 文件，并在 &lt;code>conf.py&lt;/code> 中启用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_static_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_static&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_css_files&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;custom.css&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="82-使用-markdown">8.2 使用 Markdown
&lt;/h3>&lt;p>如果更习惯 Markdown，可以安装 &lt;code>myst-parser&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install myst-parser
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在 &lt;code>conf.py&lt;/code> 中启用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;myst_parser&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后可以使用 &lt;code>.md&lt;/code> 文件代替 &lt;code>.rst&lt;/code>。&lt;/p>
&lt;h3 id="83-自动构建">8.3 自动构建
&lt;/h3>&lt;p>使用 &lt;code>sphinx-autobuild&lt;/code> 实现文档实时预览：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install sphinx-autobuild
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-autobuild source/ build/html/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="9-常见问题">9. 常见问题
&lt;/h2>&lt;ul>
&lt;li>
&lt;p>&lt;strong>Q: 文档没有更新？&lt;/strong>
A: 运行 &lt;code>make clean&lt;/code> 清理旧构建，然后重新运行 &lt;code>make html&lt;/code>。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Q: 中文显示乱码？&lt;/strong>
A: 确保 &lt;code>language = 'zh_CN'&lt;/code>，并使用支持中文的主题。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Q: 模块未找到？&lt;/strong>
A: 检查 &lt;code>sys.path&lt;/code> 是否包含模块路径。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="10-进一步学习">10. 进一步学习
&lt;/h2>&lt;ul>
&lt;li>官方文档：https://www.sphinx-doc.org&lt;/li>
&lt;li>reStructuredText 入门：http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html&lt;/li>
&lt;li>Read the Docs 教程：https://docs.readthedocs.io&lt;/li>
&lt;/ul>
&lt;h2 id="补充使用-sphinx-apidoc-自动生成-api-文档">补充：使用 &lt;code>sphinx-apidoc&lt;/code> 自动生成 API 文档
&lt;/h2>&lt;p>Sphinx 提供了 &lt;code>sphinx-apidoc&lt;/code> 工具，可以自动扫描 Python 项目中的模块、类和函数，生成对应的 reStructuredText（reST）文档框架。以下是详细步骤：&lt;/p>
&lt;hr>
&lt;h3 id="1-确保启用必要扩展">1. 确保启用必要扩展
&lt;/h3>&lt;p>在 &lt;code>source/conf.py&lt;/code> 中确保已启用以下扩展：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 自动提取文档字符串&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.napoleon&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 支持 Google/Numpy 风格文档字符串&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.viewcode&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 添加源代码链接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-项目结构示例">2. 项目结构示例
&lt;/h3>&lt;p>假设你的 Python 项目结构如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">my-docs/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── __init__.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── module1.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── module2/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── __init__.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── submodule.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── source/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── conf.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── index.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── _static/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── Makefile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中 &lt;code>module1.py&lt;/code> 包含以下代码：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">greet&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;Greet someone.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> Args:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> name (str): The name of the person to greet.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> Returns:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> str: A greeting message.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Hello, &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-运行-sphinx-apidoc">3. 运行 &lt;code>sphinx-apidoc&lt;/code>
&lt;/h3>&lt;p>在项目根目录（&lt;code>my-docs/&lt;/code>）运行以下命令：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o source/ my_project/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="参数说明">参数说明：
&lt;/h4>&lt;ul>
&lt;li>&lt;code>-o source/&lt;/code>: 指定生成的 &lt;code>.rst&lt;/code> 文件输出到 &lt;code>source/&lt;/code> 目录。&lt;/li>
&lt;li>&lt;code>my_project/&lt;/code>: 要扫描的 Python 模块或包的路径。&lt;/li>
&lt;li>可选参数：
&lt;ul>
&lt;li>&lt;code>-f&lt;/code>: 强制覆盖已存在的 &lt;code>.rst&lt;/code> 文件。&lt;/li>
&lt;li>&lt;code>-M&lt;/code>: 将模块文档放在子模块之前（默认子模块优先）。&lt;/li>
&lt;li>&lt;code>-e&lt;/code>: 为每个模块生成单独的页面。&lt;/li>
&lt;li>&lt;code>--private&lt;/code>: 包含私有成员（以 &lt;code>_&lt;/code> 开头的成员）。&lt;/li>
&lt;li>&lt;code>--no-toc&lt;/code>: 不生成目录树文件（&lt;code>modules.rst&lt;/code>）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>示例命令（强制覆盖并包含私有成员）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -f -e --private -o source/ my_project/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="4-检查生成的文件">4. 检查生成的文件
&lt;/h3>&lt;p>运行后，&lt;code>source/&lt;/code> 目录下会生成类似以下文件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">source/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── conf.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── index.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project.module1.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project.module2.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project.module2.submodule.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── modules.rst
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>my_project.rst&lt;/code> 和 &lt;code>modules.rst&lt;/code> 是模块的索引文件。&lt;/li>
&lt;li>每个 &lt;code>.rst&lt;/code> 文件对应一个模块，包含 &lt;code>.. automodule::&lt;/code> 指令，自动引用模块中的文档字符串。&lt;/li>
&lt;/ul>
&lt;h3 id="5-更新-indexrst">5. 更新 &lt;code>index.rst&lt;/code>
&lt;/h3>&lt;p>将生成的模块索引添加到 &lt;code>index.rst&lt;/code> 的 &lt;code>toctree&lt;/code> 中，例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">toctree&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:maxdepth:&lt;/span> &lt;span class="nf">2&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:caption:&lt;/span> &lt;span class="nf">Contents:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> modules&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> intro&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里 &lt;code>modules&lt;/code> 指向 &lt;code>modules.rst&lt;/code>，它会自动包含所有生成的 API 文档。&lt;/p>
&lt;h3 id="6-配置-python-路径">6. 配置 Python 路径
&lt;/h3>&lt;p>为了让 Sphinx 找到你的 Python 模块，需在 &lt;code>conf.py&lt;/code> 中添加模块路径：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../my_project&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="7-构建文档">7. 构建文档
&lt;/h3>&lt;p>运行以下命令生成 HTML 文档：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>打开 &lt;code>build/html/index.html&lt;/code>，你将看到自动生成的 API 文档，包含 &lt;code>module1.py&lt;/code> 中 &lt;code>greet&lt;/code> 函数的文档字符串。&lt;/p>
&lt;hr>
&lt;h3 id="8-实用技巧-1">8. 实用技巧
&lt;/h3>&lt;ul>
&lt;li>
&lt;p>&lt;strong>过滤成员&lt;/strong>：在 &lt;code>.rst&lt;/code> 文件中，可以通过 &lt;code>:members:&lt;/code>、&lt;code>:undoc-members:&lt;/code>、&lt;code>:private-members:&lt;/code> 等控制显示的成员。例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">automodule&lt;/span>&lt;span class="p">::&lt;/span> my_project.module1&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:private-members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:undoc-members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:show-inheritance:&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>忽略文件&lt;/strong>：如果不想为某些模块生成文档，可以在 &lt;code>sphinx-apidoc&lt;/code> 命令后添加忽略路径：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o source/ my_project/ my_project/module2/*
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>自动化脚本&lt;/strong>：将 &lt;code>sphinx-apidoc&lt;/code> 集成到构建流程中，例如在 &lt;code>Makefile&lt;/code> 中添加：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-makefile" data-lang="makefile">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">apidoc&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> sphinx-apidoc -f -o source/ my_project/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后运行 &lt;code>make apidoc &amp;amp;&amp;amp; make html&lt;/code>。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="9-注意事项">9. 注意事项
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>文档字符串&lt;/strong>：确保你的 Python 代码中有清晰的文档字符串（docstring），否则生成的文档会缺少内容。&lt;/li>
&lt;li>&lt;strong>模块路径&lt;/strong>：如果模块未正确导入，检查 &lt;code>sys.path&lt;/code> 配置。&lt;/li>
&lt;li>&lt;strong>更新文档&lt;/strong>：每次修改 Python 代码后，需重新运行 &lt;code>sphinx-apidoc&lt;/code>（加 &lt;code>-f&lt;/code> 覆盖）或手动更新 &lt;code>.rst&lt;/code> 文件。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="10-进一步优化">10. 进一步优化
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>自定义模板&lt;/strong>：在 &lt;code>source/_templates/&lt;/code> 中创建自定义模板，修改 &lt;code>sphinx-apidoc&lt;/code> 生成的 &lt;code>.rst&lt;/code> 文件格式。&lt;/li>
&lt;li>&lt;strong>持续集成&lt;/strong>：在 CI/CD 流程中自动运行 &lt;code>sphinx-apidoc&lt;/code> 和 &lt;code>make html&lt;/code>，确保文档始终与代码同步。&lt;/li>
&lt;/ul>
&lt;p>通过 &lt;code>sphinx-apidoc&lt;/code>，你可以快速为大型 Python 项目生成 API 文档，大大提高效率！&lt;/p>
&lt;h2 id="示例项目一个简单的计算器">示例项目：一个简单的计算器
&lt;/h2>&lt;p>假设我们有一个小项目 &lt;code>calculator&lt;/code>，结构如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">calculator/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── calc.py # 主代码文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── docs/ # 文档文件夹（稍后创建）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="1-创建项目代码">1. 创建项目代码
&lt;/h3>&lt;p>先在 &lt;code>calculator&lt;/code> 文件夹下创建 &lt;code>calc.py&lt;/code>，内容如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;这是一个简单的计算器模块。&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">add&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;将两个数相加。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 参数:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> a (int): 第一个数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> b (int): 第二个数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 返回:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> int: 两数之和
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">subtract&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;将两个数相减。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 参数:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> a (int): 被减数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> b (int): 减数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 返回:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> int: 两数之差
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个文件有模块级 docstring 和函数级 docstring，Sphinx 可以利用这些生成文档。&lt;/p>
&lt;hr>
&lt;h3 id="2-设置-sphinx">2. 设置 Sphinx
&lt;/h3>&lt;h4 id="安装-sphinx">安装 Sphinx
&lt;/h4>&lt;p>确保你有 Python 环境，然后在终端运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install sphinx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="初始化文档">初始化文档
&lt;/h4>&lt;p>进入 &lt;code>calculator&lt;/code> 文件夹，运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-quickstart
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>系统会问你一些问题，按以下方式回答（其他可以默认回车）：&lt;/p>
&lt;ul>
&lt;li>&lt;code>Separate source and build directories (y/n)&lt;/code>：输入 &lt;code>n&lt;/code>（简单起见，放在一起）。&lt;/li>
&lt;li>&lt;code>Project name&lt;/code>：输入 &lt;code>Calculator&lt;/code>。&lt;/li>
&lt;li>&lt;code>Author name(s)&lt;/code>：输入你的名字，比如 &lt;code>张三&lt;/code>。&lt;/li>
&lt;li>&lt;code>Project release&lt;/code>：输入 &lt;code>1.0&lt;/code>。&lt;/li>
&lt;/ul>
&lt;p>完成后，&lt;code>docs&lt;/code> 文件夹会变成这样：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">calculator/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── calc.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── docs/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── conf.py # 配置文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── index.rst # 主文档文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Makefile # Linux/Mac 生成工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── make.bat # Windows 生成工具
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="3-配置-sphinx-1">3. 配置 Sphinx
&lt;/h3>&lt;h4 id="修改-confpy">修改 &lt;code>conf.py&lt;/code>
&lt;/h4>&lt;p>打开 &lt;code>docs/conf.py&lt;/code>，做两处调整：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>添加项目路径&lt;/strong>，让 Sphinx 能找到 &lt;code>calc.py&lt;/code>：
在文件顶部添加：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;..&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 指向 calculator 目录&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>启用 &lt;code>autodoc&lt;/code> 扩展&lt;/strong>，支持自动生成代码文档：
找到 &lt;code>extensions&lt;/code> 列表，改成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h4 id="检查-indexrst">检查 &lt;code>index.rst&lt;/code>
&lt;/h4>&lt;p>默认的 &lt;code>index.rst&lt;/code> 可能是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Welcome to Calculator&amp;#39;s documentation!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">======================================
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">.. toctree::
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :maxdepth: 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>暂时不用改，后面会加内容。&lt;/p>
&lt;hr>
&lt;h3 id="4-自动生成代码文档">4. 自动生成代码文档
&lt;/h3>&lt;h4 id="用-sphinx-apidoc">用 &lt;code>sphinx-apidoc&lt;/code>
&lt;/h4>&lt;p>在 &lt;code>docs&lt;/code> 目录下运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o . ..
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>-o .&lt;/code>：输出到当前目录（&lt;code>docs&lt;/code>）。&lt;/li>
&lt;li>&lt;code>..&lt;/code>：扫描上级目录（&lt;code>calculator&lt;/code>）。&lt;/li>
&lt;/ul>
&lt;p>这会生成：&lt;/p>
&lt;ul>
&lt;li>&lt;code>modules.rst&lt;/code>：模块总览。&lt;/li>
&lt;li>&lt;code>calc.rst&lt;/code>：针对 &lt;code>calc.py&lt;/code> 的文档。&lt;/li>
&lt;/ul>
&lt;p>看看 &lt;code>calc.rst&lt;/code>，内容大概是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">calc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">====
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">.. automodule:: calc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :members:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :undoc-members:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :show-inheritance:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="整合到-indexrst">整合到 &lt;code>index.rst&lt;/code>
&lt;/h4>&lt;p>编辑 &lt;code>index.rst&lt;/code>，加入模块链接：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Welcome to Calculator&amp;#39;s documentation!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">======================================
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个简单的计算器项目，提供加法和减法功能。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">.. toctree::
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :maxdepth: 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> modules
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里手动加了句介绍文字，&lt;code>modules&lt;/code> 指向自动生成的模块文档。&lt;/p>
&lt;hr>
&lt;h3 id="5-手动添加使用说明">5. 手动添加使用说明
&lt;/h3>&lt;p>新建一个文件 &lt;code>docs/usage.rst&lt;/code>，写点教程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">使用说明
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">========
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个计算器的使用方法。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">步骤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">----
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 导入模块：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> .. code-block:: python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> from calc import add, subtract
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 调用函数：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> .. code-block:: python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> print(add(3, 5)) # 输出 8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> print(subtract(10, 2)) # 输出 8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后在 &lt;code>index.rst&lt;/code> 的 &lt;code>toctree&lt;/code> 里加一行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">.. toctree::
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :maxdepth: 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> modules
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> usage
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="6-生成文档">6. 生成文档
&lt;/h3>&lt;p>在 &lt;code>docs&lt;/code> 目录下运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make html &lt;span class="c1"># Linux/Mac&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make.bat html &lt;span class="c1"># Windows&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>完成后，打开 &lt;code>docs/_build/html/index.html&lt;/code>，你会看到：&lt;/p>
&lt;ul>
&lt;li>首页有欢迎文字和目录。&lt;/li>
&lt;li>点击 “modules” -&amp;gt; “calc”，显示 &lt;code>add&lt;/code> 和 &lt;code>subtract&lt;/code> 的自动文档（从 docstring 生成）。&lt;/li>
&lt;li>点击 “使用说明”，显示手动写的教程。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="结果预览">结果预览
&lt;/h3>&lt;p>网页大概长这样：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>首页&lt;/strong>：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Welcome to Calculator&amp;#39;s documentation!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个简单的计算器项目，提供加法和减法功能。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- modules
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- usage
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>&lt;strong>calc 页面&lt;/strong>：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">calc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个简单的计算器模块。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">add(a, b)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 将两个数相加。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 参数: a (int) - 第一个数, b (int) - 第二个数
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 返回: int - 两数之和
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">subtract(a, b)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 将两个数相减。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>&lt;strong>usage 页面&lt;/strong>：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">使用说明
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个计算器的使用方法。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">步骤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 导入模块：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> from calc import add, subtract
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 调用函数：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> print(add(3, 5)) # 输出 8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="总结流程">总结流程
&lt;/h3>&lt;ol>
&lt;li>&lt;strong>写代码+注释&lt;/strong>：&lt;code>calc.py&lt;/code> 里加 docstring。&lt;/li>
&lt;li>&lt;strong>初始化&lt;/strong>：&lt;code>sphinx-quickstart&lt;/code> 创建文档框架。&lt;/li>
&lt;li>&lt;strong>配置&lt;/strong>：改 &lt;code>conf.py&lt;/code> 加路径和扩展。&lt;/li>
&lt;li>&lt;strong>自动生成&lt;/strong>：用 &lt;code>sphinx-apidoc&lt;/code> 提取代码文档。&lt;/li>
&lt;li>&lt;strong>手动补充&lt;/strong>：写 &lt;code>usage.rst&lt;/code> 加说明。&lt;/li>
&lt;li>&lt;strong>生成网页&lt;/strong>：&lt;code>make html&lt;/code>。&lt;/li>
&lt;/ol>
&lt;hr></description></item></channel></rss>