2021-12-15 16:04:23 +08:00
|
|
|
|
1. 注册ReadtheDocs并连接到github
|
|
|
|
|
|
|
|
|
|
2. 在github上将项目克隆到本地
|
|
|
|
|
|
|
|
|
|
3. 在本地仓库中安装Sphinx
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
pip install sphinx
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
4. 创建工程
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
sphinx-quickstart
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
5. 对工程进行配置
|
|
|
|
|
|
|
|
|
|
5.1 更改主题
|
|
|
|
|
|
|
|
|
|
在source/conf.py中更改或添加如下代码
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
import sphinx_rtd_theme
|
|
|
|
|
html_theme = "sphinx_rtd_theme"
|
|
|
|
|
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
|
|
|
|
```
|
|
|
|
|
|
2021-12-15 17:54:57 +08:00
|
|
|
|
5.2 添加markdown支持和markdown表格支持
|
2021-12-15 16:04:23 +08:00
|
|
|
|
|
2021-12-15 17:54:57 +08:00
|
|
|
|
首先需要安装recommonmark和sphinx_markdown_tables
|
2021-12-15 16:04:23 +08:00
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
pip install recommonmark
|
2021-12-15 17:54:57 +08:00
|
|
|
|
pip install sphinx_markdown_tables
|
2021-12-15 16:04:23 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
在source/conf.py中更改或添加如下代码
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
from recommonmark.parser import CommonMarkParser
|
|
|
|
|
source_parsers = {
|
|
|
|
|
'.md': CommonMarkParser,
|
|
|
|
|
}
|
|
|
|
|
source_suffix = ['.rst', '.md']
|
2021-12-15 17:54:57 +08:00
|
|
|
|
extensions = [
|
|
|
|
|
'recommonmark',
|
|
|
|
|
'sphinx_markdown_tables'
|
|
|
|
|
]
|
2021-12-15 16:04:23 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
以上五步具体效果可以参考https://www.jianshu.com/p/d1d59d0cd58c
|
|
|
|
|
|
|
|
|
|
6. 在创建好项目以后,根目录下应该有如下几个文件:
|
|
|
|
|
|
|
|
|
|
- **Makefile**:在使用 `make` 命令时,可以使用这些指令(e.g. `sphinx-build`)来构建文档输出。
|
|
|
|
|
- **_build**:这是触发特定输出后用来存放所生成的文件的目录。
|
|
|
|
|
- **_static**:所有不属于源代码(e.g. 图片)一部分的文件均存放于此处,稍后会在构建目录中将它们链接在一起。
|
|
|
|
|
- **conf.py**:用于存放 Sphinx 的配置值,包括在终端执行 `sphinx-quickstart`时选中的那些值。
|
|
|
|
|
- **index.rst**:文档项目的 root 目录。如果将文档划分为其他文件,该目录会连接这些文件
|
|
|
|
|
|
|
|
|
|
7. **编写文档**:在 index.rst 文件中的主标题之后,有一个内容清单,其中包括 `toctree` 声明,它将所有文档链接都汇集到 Index。
|
|
|
|
|
|
|
|
|
|
以根目录下的index.rst为例:
|
|
|
|
|
|
|
|
|
|
```rst
|
|
|
|
|
欢迎使用PaddleClas图像分类库!
|
|
|
|
|
================================
|
|
|
|
|
|
|
|
|
|
.. toctree::
|
|
|
|
|
:maxdepth: 1
|
|
|
|
|
|
|
|
|
|
models_training/index
|
|
|
|
|
introduction/index
|
|
|
|
|
image_recognition_pipeline/index
|
|
|
|
|
others/index
|
|
|
|
|
faq_series/index
|
|
|
|
|
data_preparation/index
|
|
|
|
|
installation/index
|
|
|
|
|
models/index
|
|
|
|
|
advanced_tutorials/index
|
|
|
|
|
algorithm_introduction/index
|
|
|
|
|
inference_deployment/index
|
|
|
|
|
quick_start/index
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
可以用下面的python代码实现根目录和各个子目录下的`index.rst`文件的编写
|
|
|
|
|
|
|
|
|
|
注意:此代码应该在需要生成文档书的文件夹根目录上运行
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
def file_name(file_dir):
|
|
|
|
|
temp = []
|
|
|
|
|
for root, dirs, files in os.walk(file_dir):
|
|
|
|
|
print(dirs) #当前路径下所有子目录
|
|
|
|
|
temp = dirs #存储需要的子目录
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
# 删除不需要的子目录
|
|
|
|
|
temp.remove('images')
|
|
|
|
|
temp.remove('_templates')
|
|
|
|
|
temp.remove('_build')
|
|
|
|
|
temp.remove('_static')
|
|
|
|
|
chinese_name = ['模型训练', '介绍', '图像识别流程', '其他', 'FAQ系列', '数据准备', '安装', '模型库', '高级教程', '算法介绍', '推理部署', '快速开始']
|
|
|
|
|
# 写根目录下的rst文件
|
|
|
|
|
with open('./index.rst', 'w') as f:
|
|
|
|
|
f.write('欢迎使用PaddleClas图像分类库!\n')
|
|
|
|
|
f.write('================================\n\n')
|
|
|
|
|
f.write('.. toctree::\n')
|
|
|
|
|
f.write(' :maxdepth: 1\n\n')
|
|
|
|
|
for dir in temp:
|
|
|
|
|
f.write(' ' + dir + '/index\n')
|
|
|
|
|
f.close()
|
|
|
|
|
|
|
|
|
|
# 写各个子目录下的rst文件
|
|
|
|
|
for dir in temp:
|
|
|
|
|
for root, dirs, files in os.walk(dir):
|
|
|
|
|
print(root) #当前目录路径
|
|
|
|
|
|
|
|
|
|
files.remove('index.rst')
|
|
|
|
|
print(files) #当前路径下所有非目录子文件
|
|
|
|
|
curDir = os.path.join(file_dir, dir)
|
|
|
|
|
filename = curDir + '/index.rst'
|
|
|
|
|
idx = temp.index(dir)
|
|
|
|
|
ch_name = chinese_name[idx]
|
|
|
|
|
with open(filename, 'w') as f:
|
|
|
|
|
f.write(ch_name+'\n')
|
|
|
|
|
f.write('================================\n\n')
|
|
|
|
|
f.write('.. toctree::\n')
|
|
|
|
|
f.write(' :maxdepth: 2\n\n')
|
|
|
|
|
|
|
|
|
|
for f1 in files:
|
|
|
|
|
f.write(' ' + f1 + '\n')
|
|
|
|
|
|
|
|
|
|
f.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def readfile(filename):
|
|
|
|
|
file = open(filename)
|
|
|
|
|
i = 0
|
|
|
|
|
while 1:
|
|
|
|
|
line = file.readline()
|
|
|
|
|
print(i)
|
|
|
|
|
print(line)
|
|
|
|
|
i += 1
|
|
|
|
|
if not line:
|
|
|
|
|
break
|
|
|
|
|
pass # do something
|
|
|
|
|
file.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
file_name('./')
|
|
|
|
|
# filename = './index.rst'
|
|
|
|
|
# readfile(filename)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
8. 生成文档
|
|
|
|
|
|
|
|
|
|
运行 `make html` 命令
|
|
|
|
|
|
|
|
|
|
9. 使用浏览器查看在build/html目录下的 `index.html`文件可以查看静态网页
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|