Python's argparse to show program's version with prog and version string formatting
Question:
What’s the preferred way of specifying program name and version info within argparse?
__version_info__ = ('2013','03','14')
__version__ = '-'.join(__version_info__)
...
parser.add_argument('-V', '--version', action='version', version="%(prog)s ("+__version__+")")
Answers:
Yes, that’s the accepted way. From http://docs.python.org/dev/library/argparse.html#action:
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
You should of course be embedding the version number in your package in a standard way: Standard way to embed version into python package?
If you’re following that method, you have a __version__
variable:
from _version import __version__
parser.add_argument('--version', action='version',
version='%(prog)s {version}'.format(version=__version__))
For example, that’s the method demonstrated at https://pypi.python.org/pypi/commando/0.3.2a:
parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + __version__)
Just wanted to post another approach. As of Python 3.11, you can get a package’s version number as a string using importlib.metadata
. So if your program is a package with a pyproject.toml
file then you can get the version number that is defined in that file. The example below get’s the version string of a command line tool named genja; where genja is the name of the Python package that is the command line program.
from importlib.metadata import version
parser.add_argument('-v', '--version', action='version', version=version('genja'))
What’s the preferred way of specifying program name and version info within argparse?
__version_info__ = ('2013','03','14') __version__ = '-'.join(__version_info__) ... parser.add_argument('-V', '--version', action='version', version="%(prog)s ("+__version__+")")
Yes, that’s the accepted way. From http://docs.python.org/dev/library/argparse.html#action:
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
You should of course be embedding the version number in your package in a standard way: Standard way to embed version into python package?
If you’re following that method, you have a __version__
variable:
from _version import __version__
parser.add_argument('--version', action='version',
version='%(prog)s {version}'.format(version=__version__))
For example, that’s the method demonstrated at https://pypi.python.org/pypi/commando/0.3.2a:
parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + __version__)
Just wanted to post another approach. As of Python 3.11, you can get a package’s version number as a string using importlib.metadata
. So if your program is a package with a pyproject.toml
file then you can get the version number that is defined in that file. The example below get’s the version string of a command line tool named genja; where genja is the name of the Python package that is the command line program.
from importlib.metadata import version
parser.add_argument('-v', '--version', action='version', version=version('genja'))