关于技术文档

序言

由于最近都在忙着写技术文档,所以准备总结一下我所使用的工具、以及所遇到的坑们,包括工具的选择和优缺点之类的个人感觉。

工具清单与简单描述

  1. Atom : 开源的文本编辑器,对markdown和文档管理器的支持不错,所以选择了它(还用过Sublime但个人感觉没有Atom好用)
  2. github: 这个估计也不用讲了,网上的教程真是如繁星一般地多,真正使用起来很快就会熟悉基本操作
  3. Mkdocs:一个markdown的文档生成工具(说是生成,但肯定不可能说是帮你写文档的,准确点说应该是帮你将多个md文件整理并且按照一定预设的theme进行部署一整套的html并且便于部署到github.io上),功能较为简单
  4. Readthedocs:一个文档托管的平台
  5. Sphinx:一个python的文档生成工具(大部分基于reStrcucturedText,但是Markdown也勉强可以),功能强大,灵活性高,也是readthedocs首选使用的工具。

开始写文档

Mkdocs 是我选择的第一个写文档的工具,正如它官网所介绍的那样,的确是十分方便和轻量级的工具。

使用pip进行安装了mkdocs之后,仅仅需要使用mkdocs new project_name 就可以建立起基本的一个文档的配置目录。
其中包括一个文件夹docs和最为重要的配置文件mkdocs.yml,之后也就是使用markdown先将index.md进行修改并写成一个文档的首页。

如果除了首页以外已经没有什么需要再写的话,使用mkdocs serve就可以在本地使用flask部署一个简单的网页,可以将刚刚写的那些markdown的正确的翻译成为一个网页中的效果。

除此之外,如果需要进行迁移,仅需要使用mkdocs build即可以生成连同今天html和静态资源等的一个完整的部署用文件夹。

所以总的来说,这是一个十分方便的写文档的工具。其中提供的主题也比较多,我使用的是readthedocs的主题。

但是话又说回来,由于过于方便,所以对于整个文档的配置是十分的少的。除非你自己定制化一个主题文件,包括左侧目录栏都有可能不符合你的想法。而且markdown自身也是一个相对简单的文档语言,所以能够实现的功能是真的很少。


readthedoc主题

就拿一个很简单的要求来说,修改显示图片的大小、对齐方式,markdown+mkdocs是实现不了的,你只能对生成的html进行后期的修改,但是这样的操作无疑是十分耗费时间以及效率低下的。

所以后面为了实现autodoc的功能,这也是个十分重要的功能。在众多的工具文档中,其中一个十分重要的自然是API,而API其实是由文档工具自动生成的,而不是自己在写文档时辛苦的再次排版一次。所以说为了实现这个API的显示功能,我们也就马上投身了sphinx的怀抱。

关于部署

在投身到sphinx之前,需要讲讲这个文档的部署的问题。这个方面其实并没有尝试太多的方案,我们直接是选择了readthedocs这个老牌的文档托管加发布网站,而值得庆幸的是,mkdoc跟sphinx其实都是readthedocs所支持的软件。所以说mkdoc也进一步被证明了其的市场地位,虽然有些缺点,但是轻量级也是很多人选择的理由。

从mkdoc投身到sphinx

其实在投身sphinx时,文档已经写的差不多了。一边写文档一边找文档编辑工具的操作似乎有点奇怪,但是问题是在于文档的文字与结构都要重新被审查敲定,所以也就多出了不少的时间在意一下这个主题跟工具的问题。

Sphinx作为一个十分老牌的一个文档编辑工具,quickstart的部分也不会过于繁杂。

同样地在使用pip install -U Sphinx安装完后,直接在命令行中使用sphinx-quickstart就可以开始初始化一个空的文档结构。
但是由于这个软件的定制化能力很强,所以其中需要回答的问题就十分之多,大多都是需要如何部署、或者需不需要某些插件之类的。虽然复杂,但也不会花很多时间。

直接就可以进入写文档的操作。

但是这个时候问题就来了。 Sphinx所接受的语言主要是rst(reStructuredText),是一门虽然与markdown相似但是定制化能力更为强的文档语言,而且由于其基于python的缘故,很多语法是十分地注重空格与缩进的。

例如在markdown中所使用的代码块的格式化符号,6个反引号,这种语法就类似于C中的大括号,是将括号内的全部内容直接识别为需要处理的变量。而在rst中,所使用的则是

.. code-block:: python

import pandas as pd
a = pd.DataFrame(data)

以上这样子,在.. code-bloc:: python后需要空一行,并且在第三行开始需要有至少1个缩进,才能正确的识别到那一部分是输入的代码。

所以说sphinx的语法对于用惯了markdown的人来说,是一个新的体验,虽然也有反引号的语法,但是却不一样了。例如说inline的code,rst也是用反引号,不过是左右各两个反引号

关于rst的语法,sphinx也进行了十分详细的描述,其实也包括了如何通过Python定制化一个自定义的module或者function从而通过rst的语法进行使用。因为像是以上的code-block其实都是一个定制好的python module,然后通过rst进行调用了。

这么说来,rst比markdown定制化能力真的不是好了一点半点。

当然sphinx有个不好的地方,是不会自动检测代码的改动从而刷新编译好的静态网页,由于mkdocs是一个部署好的server,所以会自动检测代码改动从而刷新页面。但是sphinx似乎不存在这么个server,而是通过sphinx-build 或者说make html直接生成了静态的html资源文件夹,只能通过人为的去部署server和build了。

在艰难的写完文档以后,我们也就可以再一次开始处理readthedocs的事情了。

再次讨论部署的事情,处理readthedocs

在注册完readthedocs后,进入管理面板后是长这样的。

dashboard

什么项目都没有的页面,因为我是用github的账号直接登录的,当时我的第一反应是为什么看不到我github的仓库,直接选中我的仓库选择导入不是更为方便的一件事情吗。

选择import a project后,就可以看到自己当前的项目以及刚刚我说到的选择自己github项目的位置了。

import a project

(内心叨叨:好吧,上面涂划掉自己的github名字并没有啥意义了,后面我也懒得涂划掉了),以上图片中只要点击一下,就可以看到跟这个账号所绑定的所有的仓库,选择其中之一自然可以作为一个代码库进行导入。

导入一个仓库后,我们可以直接跳到构建这一步,前面关于导入的设置什么的,因为后面都还可以改,所以就不管了。唯一一个不可改的是域名,因为readthedocs的域名是按照 文档名.readthedocs.io进行命名的,后面是不可以改的,即使你改了文档名也是不会改变域名的,这一点readthedocs官方文档也有提到。

构建

readthedocs的本质有些人似乎不是很清楚,我们可以通过构建这一步讲清楚readthedocs到底帮我们做了些什么,文档build后存在了哪里,为什么要构建之类的问题。

构建的详细过程日志

从上面可以看出,readthedocs其实是在它自己的服务器上,将你指定的github目录下载下来后,建立一个虚拟环境,然后再在虚拟环境下进行build html,然后再将这个目录下的html发布到github.io 上。

所以上面提到的问题都可以得到回答。本地是看不到编译后的html的,当然也无法修改。

由于这其中涉及一个虚拟环境的问题,所以readthedocs为了某些需要安装特定包(例如自己的另一个github地址的软件)的用户提供了一个选项。允许使用自定义的requirements。

以上关于如何使用自定义的requirements和怎么将github的地址放在requirements中的方法也就不谈了。。。因为真的很简单。谷歌一下就出来了。

关于autocode

使用sphinx的理由我前面已经说了,因为要写API的部分。
这里有一点要强调的是。。。使用autocode的前提是,你在代码里都把各个class 或者function的注释都写好了,这样子autocode才能按照正确的格式读取。。例如

API举栗

酱紫的一个API注释,在代码的注释中就得写成


代码注释长这样

所以说,写好一个注释也是很花时间的。。。但是最后的最后还是
希望大家都可以乐于写文档。。方便你我他。尤其是我们这种脱离大大和谷歌就活不下去的死鱼。。。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容