Python 的 argparse 使用 prog 和版本字符串格式显示程序版本

问题描述 投票:0回答:2

在 argparse 中指定程序名称和版本信息的首选方式是什么?

__version_info__ = ('2013','03','14')
__version__ = '-'.join(__version_info__)
...
parser.add_argument('-V', '--version', action='version', version="%(prog)s ("+__version__+")")
python version argparse
2个回答
115
投票

是的,这是公认的方式。 来自 http://docs.python.org/dev/library/argparse.html#action

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

您当然应该以标准方式将版本号嵌入到包中:Standard way to embed version into python package?

如果您遵循该方法,您将有一个

__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__)

6
投票

只是想发布另一种方法。从 Python 3.8 开始,您可以使用

importlib.metadata
以字符串形式获取包的版本号。因此,如果您的程序是一个带有
pyproject.toml
文件的包,那么您可以获得该文件中定义的版本号。下面的示例获取名为 genja 的命令行工具的版本字符串;其中 genja 是作为命令行程序的 Python 包的名称。

from importlib.metadata import version

parser.add_argument('-v', '--version', action='version', version=version('genja'))
© www.soinside.com 2019 - 2024. All rights reserved.