最近寫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中的字符串讀出並顯示出來。