Python 生成API文档

目录

前言:

项目层级

安装sphinx

创建sphinx文档项目

配置conf.py文件

编译代码为api文档

编译文档(windows)

异常处理

异常1:无法生成rst文件

异常2:WARNING: autodoc: failed to import module xxx;WARNING: autodoc: failed to import module 'xxx'; the following exception was raised:No module named 'xxx'

异常3:Encoding error:'utf8' codec can't decode byte 0xc0 in position 44:invalid start byte


前言:

最近需要把项目生成API文档,在网上找了下发现sphinx这个框架用的比较多,研究了一下,发现还是挺赞的,只不过纸上得来终觉浅,绝知此事要躬行,别人的项目结构啥的和自己不一样,网上基本都是单目录的层级,但是实际项目往往都会有比较深的层级关系,所以还是踩了不少坑,在此结合自己的项目总结一下。


项目层级


一般情况真实项目都是会存在多种层级关系的,这是小编做的一个项目的层级结构: 

po_pattern/
├── __init__.py
├── config/
│ ├── env_const.py
├── pages/
│ ├── __init__.py
│ ├── APage.py
│ ├── BPage.py
└── testcase/
├── __init__.py
├── conftest.py
├── scenario_part1_test.py
├── scenario_part2_test.py


Ps:po上面还有一级项目目录,跟源码目录同级创建doc目录然后切换到doc目录创建文档项目
创建文档项目

安装sphinx

第一步安装sphinx,直接pip安装就行了:

pip install  sphinx

 安装完后就是创建一个sphinx文档项目了,直接在项目根目录下创建一个doc目录,然后切换到doc目录执行命令:sphinx-quickstart,执行后会创建一个sphinx文档项目。

创建sphinx文档项目

pycharm切换到终端,执行命令sphinx-quickstart,会提示设置结构分离、项目名、作者名、版本号、语言(配置后面可修改):

sphinx-quickstart


输出:

Welcome to the Sphinx 7.2.6 quickstart utility.
Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).
You have two options for placing the build directory for Sphinx output.
The project name will occur in several places in the built documentation.
> Project name: test
> Author name(s): test
> Project release []: 1.0
If the documents are to be written in a language other than English,
translate text that it generates into that language.
For a list of supported codes, see
https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-language.
> Project language [en]: zh_CN


配置conf.py文件

这个文件主要设置文档项目路径、文档主题、源码api文档字符串收集等配置


conf.py

# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# sys.path.insert(0, os.path.abspath(".."))
# a = os.path.abspath("..")
# print('a:%s' % a)
import os
import sys
sys.path.insert(0, os.path.abspath('../..'))
for v in sys.path:
print(v)
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
project = 'test'
copyright = '2023, test'
author = 'C'mon'
release = '1.0'
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.doctest',
'sphinx.ext.intersphinx',
'sphinx.ext.todo',
'sphinx.ext.coverage',
'sphinx.ext.mathjax',
'sphinx.ext.viewcode' 
]
templates_path = ['_templates']
exclude_patterns = []
language = 'zh_CN'
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
html_theme = 'alabaster'
html_static_path = ['_static']


编译代码为api文档

用法:
sphinx-apidoc [选项] -o <输出路径> <模块路径> [排除模式…]

这个输出路径一般就是文档中的source,然后接要生成源码的模块路径如下:

sphinx-apidoc -o ./source ../po_pattern

执行后输出如下:
(dmg_bi_auto_test) PS D:\dmg_bi_auto_test\doc> sphinx-apidoc -o ./source ../po_pattern

执行完后会在source目录下生成模块的rst 文件,没生成是有问题的。

编译文档(windows)

.\make html 

正常输出:
(dmg_bi_auto_test) PS D:\dmg_bi_auto_test\doc> .\make html 
Running Sphinx v7.2.6
D:\dmg_bi_auto_test 
D:\dmg_bi_auto_test\po_pattern\pages 
D:\dmg_bi_auto_test\po_pattern\testcase 
D:\工作\dmg_bi_auto_test\Scripts\sphinx-build.exe
C:\Program Files\Python\python311.zip
C:\Program Files\Python\DLLs
C:\Program Files\Python\Lib
highlighting module code... [100%] po_pattern.testcase.self_analysis_scenario_testcase_test
writing additional pages... search done
dumping search index in Chinese (code: zh)... done
dumping object inventory... done
build succeeded, 1 warning.
The HTML pages are in build\html.

以上是执行成功的之后打开build目录下的index.html文件就可以查看api文档了。

异常处理

异常1:无法生成rst文件

原因:不能递归目录,存在子目录情况下需要指定到最深层级的目录Python模块查找

异常2:WARNING: autodoc: failed to import module xxx;
WARNING: autodoc: failed to import module 'xxx'; the following exception was raised:
No module named 'xxx'

原因:未识别到包下的模块
异常1和2属于同类问题:

解决办法:
1、不符合规范的目录改为python包目录
Python 模块路径搜索:https://docs.python.org/zh-cn/3/tutorial/modules.html
模块搜索路径
当导入一个名为 spam 的模块时,解释器首先会搜索具有该名称的内置模块。 这些模块的名称在 sys.builtin_module_names 中列出。 如果未找到,它将在变量 sys.path 所给出的目录列表中搜索名为 spam.py 的文件。 sys.path 是从这些位置初始化的:

  • 被命令行直接运行的脚本所在的目录(或未指定文件时的当前目录)。
  • PYTHONPATH (目录列表,与 shell 变量 PATH 的语法一样)。
  • 依赖于安装的默认值(按照惯例包括一个 site-packages 目录,由 site 模块处理)。

更多细节请参阅 sys.path 模块搜索路径的初始化。

导入包时,Python 搜索 sys.path 里的目录,查找包的子目录。
必须要有 __init__.py 文件才能让 Python 将包含该文件的目录当作包来处理。 
因此新建的目录如果不符合包的规范的话是查找不到包里面的模块的。


异常3:Encoding error:'utf8' codec can't decode byte 0xc0 in position 44:invalid start byte

保证所有python 模块(.py文件)的编码格式为utf-8在*.py文件的第一行添加# -*- coding:utf-8 -*-

参考:

https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#module-sphinx.ext.autodoc
https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html#module-sphinx.ext.napoleon

https://www.sphinx-doc.org/en/master/man/sphinx-apidoc.html

https://docs.python.org/zh-cn/3/library/sys_path_init.html#sys-path-init

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

etcd 与 Consul 的一致性读对比

本文分享和对比了 etcd 和 Consul 这两个存储的一致性读的实现。 作者&#xff1a;戴岳兵&#xff0c;爱可生研发中心工程师&#xff0c;负责项目的需求开发与维护工作。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 本…

Python实现FA萤火虫优化算法优化LightGBM回归模型(LGBMRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

0基础学java-day14

一、集合 前面我们保存多个数据使用的是数组&#xff0c;那么数组有不足的地方&#xff0c;我们分析一下 1.数组 2 集合 数据类型也可以不一样 3.集合的框架体系 Java 的集合类很多&#xff0c;主要分为两大类&#xff0c;如图 &#xff1a;[背下来] package com.hspedu.c…

UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)

UniApp 运行到浏览器的时候&#xff0c;接口会跨域报错&#xff0c;这里通过两种方式解决&#xff0c;第一&#xff1a;修改Uniapp自带的manifest.json 源码视图并进行配置h5设置。第二&#xff1a;在项目根目录新建vue.config.js并配置代理。 二选一即可。 修改或调整配置文件…

Python 进阶(十四):枚举类型(enum 模块)

大家好&#xff0c;我是水滴~~ 本篇文章主要介绍了Python中的枚举类型&#xff0c;主要内容包括&#xff1a;枚举类型的简介、创建枚举类型、使用枚举类型等。 文章中包含大量的代码示例&#xff0c;能够帮助新手同学快速入门。 《Python入门核心技术》专栏总目录・点这里 文…

Java使用Redis

项目是基于 maven 构建的&#xff0c;那么可以直接导入 maven 坐标&#xff0c;如下所示&#xff1a; <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency>…

Vue 父传子组件传参 defineProps

defineProps 属性&#xff1a;用于接收父组件传递过来的数据。 注意&#xff1a;如果 defineProps 接收的参数名&#xff0c;和已有变量名相同&#xff0c;就会造成命名冲突。 语法格式&#xff1a; // 无限制 const props defineProps([参数名, 参数名]);// 限制数据类型 …

第二十一章总结

一、网络通信&#xff1a; 1.网络程序设计基础&#xff1a;网络程序设计编写的是与其他计算机进行通信的程序。 1.1局域网与互联网&#xff1a;为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机 2.网络协议&#xff1a;网络协议规定了计算机之间连接的…

文心一言大模型应用开发入门

本文重点介绍百度智能云平台、文心一言、千帆大模型平台的基本使用与接入流程及其详细步骤。 注册文心一言 请登录文心一言官方网站 https://yiyan.baidu.com/welcome 点击登录&#xff1b;图示如下&#xff1a; 请注册文心一言账号并点击登录&#xff0c;图示如下&#xff1…

Java面试题(每天10题)-------连载(42)

目录 Spring篇 1、Spring Bean的作用域之间有什么区别&#xff1f; 2、什么是Spring inner beans&#xff1f; 3、Spring框架中的单例Beans是线程安全的吗&#xff1f; 4、请举例说明如何在Spring中诸如一个Java Collection&#xff1f; 5、如何向Spring Bean中诸如一个J…

游戏:火星孤征 - deliver us mars - 美图秀秀~~

今天水一篇&#xff0c;借着免费周下载了deliver us mars&#xff0c;玩下来截了好多图&#xff0c;就放这里了。 游戏没有难度&#xff0c;剧情也不难理解&#xff0c;美图到处都是&#xff0c;建模细节也是满满&#xff0c;值得一玩。 游戏中的 A.S.E是守卫飞行机器人&…

力扣刷题day2(最长公共前缀,有效括号,删除有序数组中的重复元素)

题目1&#xff1a;14.最长公共前缀 思路和解析&#xff1a; #define _CRT_SECURE_NO_WARNINGS //最长公共前缀 char* longestCommonPrefix(char** strs, int strsSize) {// 如果字符串数组为空&#xff0c;则返回空字符串if (strsSize 0){return "";}// 将第一个…

网络安全威胁——跨站脚本攻击

跨站脚本攻击 1. 定义2. 跨站脚本攻击如何工作3. 跨站脚本攻击类型4. 如何防止跨站脚本攻击 1. 定义 跨站脚本攻击&#xff08;Cross-site Scripting&#xff0c;通常称为XSS&#xff09;&#xff0c;是一种典型的Web程序漏洞利用攻击&#xff0c;在线论坛、博客、留言板等共享…

JRT打印预览实现

JRT客户端部分已经实现了打印、导出Excel部分&#xff0c;之前没实现打印预览部分&#xff0c;因为要自己写打印预览界面&#xff0c;所以留到最后做&#xff0c;经过两晚的努力&#xff0c;实现了打印预览。 效果: 打印预览界面代码 package Monitor.Print;import javafx.a…

海鹰数据 shopee :为Shopee卖家提供的数据分析工具

在如今的电商时代&#xff0c;拥有准确的市场数据和深入的竞争分析是每个卖家成功的关键。为了帮助Shopee卖家更好地了解市场趋势、优化商品策略并提高运营效果&#xff0c;海鹰数据&#xff08;Haiying Data&#xff09;应运而生。作为一个专注于Shopee平台的数据分析工具&…

【日常总结】树莓派导致的公司无法上网 - 广播风暴

一、场景 二、问题 三、分析原因 四、解决方案 方案一&#xff1a;更换树莓派后ping路由器恢复正常 方案二&#xff1a;配置交换机 交换机广播风暴配置 也可以通过PPS来限速 查看配置 一、场景 宽带&#xff1a;公司3条500M光纤-联通 路由器&#xff1a;锐捷 在线用户…

VMware vSphere Web Services SDK 6.5编程指南(译文)

VMware vSphere Web Services SDK 6.5编程指南(译文) 本文档根据VMware vSphere 6.5 Documentation Center进行翻译整理&#xff0c;总共八章共110页。 先申明该译文文档非免费&#xff0c;有需要的可以联系(私信或微信)译者&#xff0c;文章尾部留也有联系方式。 目录 … ……

C++ vector在使用resize方法时不会改变原有的值.

resize() 函数可以接受以下几种参数&#xff1a; 一个整数参数&#xff1a;将向量的大小调整为指定的整数值。如果指定的大小大于当前向量的大小&#xff0c;则在向量末尾添加默认构造的元素&#xff08;对于 int 类型是0&#xff0c;对于指针类型是nullptr&#xff0c;对于引用…

使用特殊token 编码超级大的voc词表LLM

这里写目录标题 代码解析代码 import pandas as pd import numpy as np from tqdm import tqdm en_voc =pd.read_pickle("/home/aistudio/en_voc.pandas_pickle") # 计算需要几位特殊token 表达 en_voc def gen_sp(en_voc1)

SAP MM中的科目分配类别是什么,如何配置

一、概述 这篇文章将概述 SAP MM 中的科目分配类别的基本概念以及如何在系统中配置它。我将在SAP配置中逐步解释配置。在此之前要理解采购的两种模式&#xff0c;库存物料采购和消耗型物料采购之间的区别。 1.1、库存采购 库存采购的物料&#xff0c;在收货后做库存管理&…