最近写python的代码比较多,一个比较明显的问题就是python的代码都是脚本,发布时由于脚本的缘故导致一堆的文件,很不方便,看了pyinstaller貌似3.6的可以打包成一个可执行文件。
到这一步需要一个-v的过程来表明当前程序是哪天打的包,gitlab的序列号是多少,以求得发布包的唯一性和可验证性。
显然,一个比较简单的命令行的框架就呼之欲出了
假设文件为demo.py
期望调用python demo.py -v显示版本
python demo.py -h显示帮助信息
python demo.py run执行正式的程序
代码如下:
import click
def _show_version():
click.echo('Version 1.0.1')
def print_version(ctx, param, value):
if not value or ctx.resilient_parsing:
return
_show_version()
ctx.exit()
@click.group()
@click.help_option('-h', '--help')
@click.option('-v', '--version', is_flag=True, callback=print_version,
expose_value=False, is_eager=True, help='show app version.')
def cli():
pass
@cli.command(help='show app version.')
def version():
_show_version()
@cli.command(help='run app.')
def run():
print("run")
if __name__ == '__main__':
cli()
这样,一个带命令行参数,能够显示version的简单框架即完成了。
注意的是, _show_version函数特意写简单了,正式的版本中应该是在打包之前获取到当天时间,配置文件中的版本号,gitlab中的前7位序列号,组成一个版本字符串存于某个version.txt中,每打一次包就运行一次前面的逻辑,打包后的程序再调用_show_version函数 将version.txt中的字符串读出并显示出来。
最后,这个框架最好能写成一个库,别的程序import,然后就自动有相应的功能了.