存储python CLI软件版本的好方法是什么?(<;应用程序>;--版本)

存储python CLI软件版本的好方法是什么?(<;应用程序>;--版本),python,command-line-interface,design-guidelines,Python,Command Line Interface,Design Guidelines,Python CLI应用程序使用--version参数显示版本。 存储这些信息的正确方法是什么?Argparse对此有一个参数 import argparse parser = argparse.ArgumentParser(prog='PROG') parser.add_argument('--version', action='version', version='%(prog)s 2.0') parser.parse_args(['--version']) 但我不相信这是正确的方法。我正

Python CLI应用程序使用
--version
参数显示版本。 存储这些信息的正确方法是什么?Argparse对此有一个参数

import argparse
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--version', action='version', version='%(prog)s 2.0')
parser.parse_args(['--version'])

但我不相信这是正确的方法。我正在考虑将该版本存储在一个文件中,这样它就可以由构建管道维护,但它应该受到保护,这样用户就不能修改它。

我已经创建了一个version.py文件,并将其导入到主代码中。如果它的dev+将添加到版本中,如果它是exe,则+将被忽略

文件内容示例:

import sys
VERSION = 'V' + '0' + '.' + '3'
if getattr(sys, 'frozen', False): #adding + for dev and Build for exe
    VERSION = VERSION + ' '
else:
    VERSION = VERSION + ' +'

我还创建了一个
version.py
文件,但我的内容更简单:

version='developer'

线索是,在我的管道中,这一行文件被来自git标记的实际版本所取代。因此,管道构建提供的每个版本都将包含类似于
version=“v1.0.23”
的内容。 然后,我可以在需要的任何地方从版本导入版本,只需执行

gitlab ci的示例:

  # set version
  - VERSION=$(git describe --tags)
  - echo "version = '$VERSION'" > version.py

如果用户真的修改了它,为什么会有问题或者是你的问题呢?我觉得这是不对的。软件和操作系统不允许您修改版本文件。为什么我的软件会允许这样?谢谢!真聪明!非常感谢。我喜欢这个主意!但为什么要在非冻结应用程序的末尾添加“+”?为什么要进行任何连接,为什么不在
VERSION='V0.3'
,为什么要添加一个尾随空格?这是您的愿望,如果是一个小更改,我将在小数点后增加数字。或少校,我将增加第一个数字。就这样