Python 快速实现CLI 应用程序的脚手架


Posted in Python onDecember 05, 2017

今天跟大家分享一下如何快速实现一个Python CLI应用程序的脚手架,之所以会做这个是因为当时需要做一个运维的小工具希望用命令行的方式来使用,但是搜遍网上很多资料都没有系统讲解从开发、集成、发布、文档等一系列流程的文章。

工程结构

Python 快速实现CLI 应用程序的脚手架

如上图,这就是一个比较规范的Python CLI应用项目了,下面一一讲下各文件的用途:

项目文档

这里我们用Sphinx来实现文档的自动生成,当然你要首先通过markdown和rst文件定义好文档的内容,然后进入docs目录执行 make html命令就可以在_build目录下生成对应的静态文件,如下图:

Python 快速实现CLI 应用程序的脚手架

具体Sphinx如何使用以及配置后面会单独文章讲解

主工程

这里讲几个需要注意的地方

1、日志的配置:

这里可以全局设置日志的一些输出级别和格式化方式

Python 快速实现CLI 应用程序的脚手架

2、cli文件

这里通过click库来实现

Python 快速实现CLI 应用程序的脚手架

3、二进制文件打包

Python 快速实现CLI 应用程序的脚手架

如上图,有时候我们的工程中会包含二进制文件,也就是非Python代码的文件,这时候如果还是像往常一样打包发布,安装的时候会发现无法找到此文件,所以需要在根目录的MANIFEST.in文件中加入

Python 快速实现CLI 应用程序的脚手架

脚本

如下图,这里的make-release文件主要是用来自动控制版本的,如下图,通过Git 的提交记录了来作为项目的唯一版本号标识,再对 init 文件进行重新写入达到持续集成时版本号自增的目的。

Python 快速实现CLI 应用程序的脚手架

单元测试

test文件夹中存放的就是项目的单元测试文件了,这里就不细展开讲了,后面会具体讲讲如何跟Jenkins集成实现静态代码检查

setup

最重要的就是setup.py这个文件了,项目最后打包发布到pypi仓库主要的配置信息都在这里了,如下图:

Python 快速实现CLI 应用程序的脚手架

这个脚手架的项目地址:https://github.com/logan62334/python-cli-template

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中Django框架下的staticfiles使用简介
May 30 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
详解python中executemany和序列的使用方法
Aug 12 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
Python OpenCV去除字母后面的杂线操作
Jul 05 Python
对Keras自带Loss Function的深入研究
May 25 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 Python
Python实现生成bmp图像的方法
Jun 13 Python
Elasticsearch 基本查询和组合查询
Apr 19 Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 Python
python调用Delphi写的Dll代码示例
Dec 05 #Python
Python字典数据对象拆分的简单实现方法
Dec 05 #Python
python reduce 函数使用详解
Dec 05 #Python
有趣的python小程序分享
Dec 05 #Python
详细分析python3的reduce函数
Dec 05 #Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 #Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 #Python
You might like
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
js 动态选中下拉框
2009/11/26 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
详解Python的循环结构知识点
2019/05/20 Python
Python Pandas 获取列匹配特定值的行的索引问题
2019/07/01 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
Tensorflow 多线程设置方式
2020/02/06 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
python获取linux系统信息的三种方法
2020/10/14 Python
django中ImageField的使用详解
2020/12/21 Python
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
周年庆促销方案
2014/03/15 职场文书
产品售后服务承诺书
2014/05/21 职场文书
中文专业求职信
2014/06/20 职场文书
检讨书范文2000字
2015/01/28 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫