为python注释生成漂亮的API文档(python调用api接口代码)
off999 2024-09-23 11:40 22 浏览 0 评论
sphinx简介
sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发。新版的Python3文档就是由sphinx生成的,并且它已成为Python项目首选的文档工具,同时它对C/C++项目也有很好的支持。更多详细特性请参考spinx官方文档,本篇博客主要介绍如何快速为你的Python注释生成API文档。
sphinx官方文档链接:https://zh-sphinx-doc.readthedocs.io/en/latest/intro.html
环境
sphinx需要依赖Python环境,所以在使用sphinx之前需要先安装Python
- 需要安装python
- 安装sphinx
pip install sphinx
实例
新建一个项目
目录结构如上图所示,doc目录使用来存放API文档,src目录是用来存放项目的源码。
src目录下的源码
#coding=UTF-8 class Demo1(): """类的功能说明""" def add(self,a,b): """两个数字相加,并返回结果""" return a+b def google_style(arg1, arg2): """函数功能. 函数功能说明. Args: arg1 (int): arg1的参数说明 arg2 (str): arg2的参数说明 Returns: bool: 返回值说明 """ return True def numpy_style(arg1, arg2): """函数功能. 函数功能说明. Parameters ---------- arg1 : int arg1的参数说明 arg2 : str arg2的参数说明 Returns ------- bool 返回值说明 """ return True
demo1文件,主要使用了两种不同的Python注释分格。对于简单的例子和简单的函数以及文档说明,使用google style显得更为简洁,而对于比较复杂详细的文档说明numpy style更为流行。
#coding=UTF-8 def my_function(a, b): """函数功能说明 >>> my_function(2, 3) 6 >>> my_function('a', 3) 'aaa' """ return a * b
demo2文件的注释看起来像Python命令行输入的文档字符串,主要是用来检查命令输出是否匹配下行的内容,它允许开发人员在源码中嵌入真实的示例和函数的用法,还能确保代码被测试和工作。
使用sphinx建立API文档项目
- 进入到doc目录下
cd 项目路径/doc
输入sphinx-quickstart命令,会输出选项
> Root path for the documentation [.]: sphinx_demo > Separate source and build directories (y/n) [n]: y > Name prefix for templates and static dir [_]: > Project name: sphinx_demo > Author name(s): sphinx demo > Project version []: 1.0 > Project release [1.0]: > Project language [en]: zh_CN > Source file suffix [.rst]: > Name of your master document (without suffix) [index]: > Do you want to use the epub builder (y/n) [n]: > autodoc: automatically insert docstrings from modules (y/n) [n]: y > doctest: automatically test code snippets in doctest blocks (y/n) [n]: y > intersphinx: link between Sphinx documentation of different projects (y/n) [n]: y > todo: write "todo" entries that can be shown or hidden on build (y/n) [n]: y > coverage: checks for documentation coverage (y/n) [n]: y > imgmath: include math, rendered as PNG or SVG images (y/n) [n]: y > mathjax: include math, rendered in the browser by MathJax (y/n) [n]: y > ifconfig: conditional inclusion of content based on config values (y/n) [n]: > viewcode: include links to the source code of documented Python objects (y/n) [n]: > githubpages: create .nojekyll file to publish the document on GitHub pages (y/n) [n]: > Create Makefile? (y/n) [y]: > Create Windows command file? (y/n) [y]:
因为我们需要从Python代码的注释中自动导出API文档,所以需要将autodoc: automatically insert docstrings from modules (y/n) [n]: y如果忘记设置,可以在conf.py中的extensions中添加'sphinx.ext.autodoc'。选项后面没有输入的,直接按回车键使用默认设置。选项后面有输入的,按照我的设置即可,如果不使用中文文档,可以在language配置中使用默认设置。设置完成之后,可以看到如下的目录结构
后面如果需要修改配置,选项在source/conf.py文件中修改即可。
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.mathjax']
通过设置conf.py中的extensions,可以为sphinx添加额外的扩展,如果想要将html文档转换为PDF,只需要先安装扩展,然后再此处添加即可使用。由于我们的注释代码主要同时支持google style和numpy style,所以我们需要添加一个扩展来支持。
sphinx.ext.napoleon
为源码生成html文件
- 修改source/conf.py文件的19-21行
import os import sys sys.path.insert(0, os.path.abspath('../../../src'))#指向src目录
将命令行切换到doc目录下,执行以下命令
sphinx-apidoc -o sphinx_demo/source ../src/ >Creating file sphinx_demo/source\demo1.rst. >Creating file sphinx_demo/source\demo2.rst. >Creating file sphinx_demo/source\modules.rst.
清理文件
cd sphinx_demo make clean >Removing everything under 'build'...
生成html文件
make html
请确保这一步没有输出error和exception
打开build/html/index.html
修改API的主题
打开source/conf.py文件,找到html_theme = 'alabaster',修改即可,sphinx官方提供了几种主题可以进行选择,sphinx主题设置
主题设置链接:http://www.sphinx-doc.org/en/master/theming.html
相关错误解决办法
SyntaxError:Non-ASCII character '\xba' in file .....py
在*.py文件的第一行添加#coding=UTF-8
Encoding error:'utf8' codec can't decode byte 0xc0 in position 44:invalid start byte
确保*.py文件的编码格式为utf-8,通过notepad++可以进行查看,如果不是请修改为utf-8格式
添加sphinx.ext.napoleon后报Exception occurred ....return translator['sphinx'].ugettext(message) KeyError:'sphinx'
Sphinx1.3,napoleon扩展使用sphinx.ext.napoleon,Sphinx <= 1.2使用sphinxcontrib.napoleon
最后,给大家推荐一个非常好的学习人工智能相关知识的平台——微信小程序“八斗问答”,有不懂的问题可以在上面进行免费提问,还有大咖会进行详细解答,还可以与大咖一对一咨询。我现在也已经入驻了“八斗问答”,以后的文章在上面也会同步更新,有不懂的地方欢迎来咨询。
相关推荐
- 编写更多 pythonic 代码(十三)——Python类型检查
-
一、概述在本文中,您将了解Python类型检查。传统上,类型由Python解释器以灵活但隐式的方式处理。最新版本的Python允许您指定显式类型提示,这些提示可由不同的工具使用,以帮助您更...
- [827]ScalersTalk成长会Python小组第11周学习笔记
-
Scalers点评:在2015年,ScalersTalk成长会完成Python小组完成了《Python核心编程》第1轮的学习。到2016年,我们开始第二轮的学习,并且将重点放在章节的习题上。Pytho...
- 用 Python 画一颗会跳动的爱心:代码里的浪漫仪式感
-
在编程的世界里,代码不仅是逻辑的组合,也能成为表达情感的载体。今天我们就来聊聊如何用Python绘制一颗「会跳动的爱心」,让技术宅也能用代码传递浪漫。无论是写给爱人、朋友,还是单纯记录编程乐趣,这...
- Python面向对象编程(OOP)实践教程
-
一、OOP理论基础1.面向对象编程概述面向对象编程(Object-OrientedProgramming,OOP)是一种编程范式,它使用"对象"来设计应用程序和软件。OOP的核心...
- 如何在 Python 中制作 GIF(python做gif)
-
在数据分析中使用GIF并发现其严肃的一面照片由GregRakozy在Unsplash上拍摄感谢社交媒体,您可能已经对GIF非常熟悉。在短短的几帧中,他们传达了非常具体的反应,只有图片才能传达...
- Python用内置模块来构建REST服务、RPC服务
-
1写在前面和小伙伴们分享一些Python网络编程的一些笔记,博文为《PythonCookbook》读书后笔记整理博文涉及内容包括:TCP/UDP服务构建不使用框架创建一个REST风格的HTTP...
- 第七章:Python面向对象编程(python面向对象六大原则)
-
7.1类与对象基础7.1.1理论知识面向对象编程(OOP)是一种编程范式,它将数据(属性)和操作数据的函数(方法)封装在一起,形成一个称为类(Class)的结构。类是对象(Object)的蓝图,对...
- 30天学会Python编程:8. Python面向对象编程
-
8.1OOP基础概念8.1.1面向对象三大特性8.1.2类与对象关系核心概念:类(Class):对象的蓝图/模板对象(Object):类的具体实例属性(Attribute):对象的状态/数据方法...
- RPython GC 对象分配速度大揭秘(废土种田,分配的对象超给力)
-
最近,对RPythonGC的对象分配速度产生了浓厚的兴趣。于是编写了一个小型的RPython基准测试程序,试图探究它对象分配的大致速度。初步测试与问题发现最初的设想是通过一个紧密循环来分配实...
- 30天学会Python编程:2. Python基础语法结构
-
2.1代码结构与缩进规则定义与原理Python使用缩进作为代码块的分界符,这是Python最显著的特征之一。不同于其他语言使用大括号{},Python强制使用缩进来表示代码层次结构。特性与规范缩进量...
- Python 类和方法(python类的方法与普通的方法)
-
Python类和方法Python类创建、属性和方法具体是如何体现的,代码中如何设计,请继续看下去。蟒蛇类解释在Python中使用OOP?什么是Python类?Python类创建Pyt...
- 动态类型是如何一步步拖慢你的python程序的
-
杂谈人人都知道python慢,这都变成了人尽皆知的事情了,但你知道具体是什么拖慢了python的运行吗?动态类型肯定要算一个!动态类型,能够提高开发效率,能够让我们更加专注逻辑开发,使得编程更加灵活。...
- 用Python让图表动起来,居然这么简单
-
我好像看到这个emoji:动起来了!编译:佑铭参考:https://towardsdatascience.com/how-to-create-animated-graphs-in-python-bb6...
- Python类型提示工程实践:提升代码质量的静态验证方案
-
根据GitHub年度开发者调查报告,采用类型提示的Python项目维护成本降低42%,代码审查效率提升35%。本文通过9个生产案例,解析类型系统在工程实践中的应用,覆盖API设计、数据校验、IDE辅助...
- Python:深度剖析实例方法、类方法和静态方法的区别
-
在Python中,类方法(classmethod)、实例方法(instancemethod)和静态方法(staticmethod)是三种不同类型的函数,它们在使用方式和功能上有一些重要的区别。理...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 编写更多 pythonic 代码(十三)——Python类型检查
- [827]ScalersTalk成长会Python小组第11周学习笔记
- 用 Python 画一颗会跳动的爱心:代码里的浪漫仪式感
- Python面向对象编程(OOP)实践教程
- 如何在 Python 中制作 GIF(python做gif)
- Python用内置模块来构建REST服务、RPC服务
- 第七章:Python面向对象编程(python面向对象六大原则)
- 30天学会Python编程:8. Python面向对象编程
- RPython GC 对象分配速度大揭秘(废土种田,分配的对象超给力)
- 30天学会Python编程:2. Python基础语法结构
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python人脸识别 (54)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)