@@ -90,6 +90,7 @@ import sys as _sys from gettext import gettext as _, ngettext +from zipfile import is_zipfile as _is_zipfile SUPPRESS = '==SUPPRESS==' @@ -1662,6 +1663,22 @@ self._group_actions.remove(action) +def _prog_name(prog): + if prog is not None: + return prog + + mod = _sys.modules['__main__'] + arg0 = _sys.argv[0] + if mod.__spec__ is None: + return _os.path.basename(arg0) + + py = _os.path.basename(_sys.executable) + if _is_zipfile(arg0): + return f'{py} {arg0}' + + return f'{py} -m {mod.__spec__.name.removesuffix(".__main__")}' + + class ArgumentParser(_AttributeHolder, _ActionsContainer): """Object for parsing command line strings into Python objects. @@ -1704,11 +1721,7 @@ argument_default=argument_default, conflict_handler=conflict_handler) - # default setting for prog - if prog is None: - prog = _os.path.basename(_sys.argv[0]) - - self.prog = prog + self.prog = _prog_name(prog) self.usage = usage self.epilog = epilog self.formatter_class = formatter_class