Python's argparse to show program's version with prog and version string formatting

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__+")")
  • http://argparse.googlecode.com/svn/trunk/doc/ArgumentParser.html#prog
  • http://pymotw.com/2/argparse/
  • http://www.python.org/dev/peps/pep-0386/
  • http://www.python.org/dev/peps/pep-0396/
  • http://www.python.org/dev/peps/pep-3001/

Solution 1:

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