Python argparse 显示程序版本及格式化版本字符串

65 投票
2 回答
30179 浏览
提问于 2025-04-17 19:04

在使用argparse时,怎么指定程序名称和版本信息是比较好的方式呢?

__version_info__ = ('2013','03','14')
__version__ = '-'.join(__version_info__)
...
parser.add_argument('-V', '--version', action='version', version="%(prog)s ("+__version__+")")

2 个回答

5

我想分享另一种方法。从Python 3.11开始,你可以通过importlib.metadata来获取一个包的版本号,结果是一个字符串。如果你的程序是一个包含pyproject.toml文件的包,那么你就可以获取到在这个文件中定义的版本号。下面的例子展示了如何获取一个名为genja的命令行工具的版本字符串;其中genja就是这个命令行程序对应的Python包的名字。

from importlib.metadata import version

parser.add_argument('-v', '--version', action='version', version=version('genja'))
114

是的,这就是被认可的做法。来自 http://docs.python.org/dev/library/argparse.html#action

>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')

当然,你应该以标准的方式在你的包里嵌入版本号:在Python包中嵌入版本的标准方式?

如果你按照这个方法做的话,你会有一个 __version__ 变量:

from _version import __version__
parser.add_argument('--version', action='version',
                    version='%(prog)s {version}'.format(version=__version__))

例如,这就是在 https://pypi.python.org/pypi/commando/0.3.2a 上展示的方法:

parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + __version__)

撰写回答