Python argparse 显示程序版本及格式化版本字符串
在使用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__)