https://github.com/python/cpython/commit/7d2c39752fa6f685f15ad9c585d83a62553477c2
commit: 7d2c39752fa6f685f15ad9c585d83a62553477c2
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2024-10-10T00:20:53+03:00
summary:

gh-91818: Use default program name in the CLI of many modules (GH-124867)

As argparse now detects by default when the code was run as a module.

This leads to using the actual executable name instead of simply "python"
to display in the usage message ("usage: python -m ...").

files:
A Misc/NEWS.d/next/Library/2024-10-01-23-29-09.gh-issue-91818.Kz8cPI.rst
M Lib/ast.py
M Lib/ensurepip/__init__.py
M Lib/ensurepip/_uninstall.py
M Lib/json/tool.py
M Lib/pdb.py
M Lib/sqlite3/__main__.py
M Lib/test/test_sqlite3/test_cli.py
M Lib/tokenize.py
M Lib/venv/__init__.py

diff --git a/Lib/ast.py b/Lib/ast.py
index a954d4a97d3c22..154d2c8c1f9ebb 100644
--- a/Lib/ast.py
+++ b/Lib/ast.py
@@ -1743,7 +1743,7 @@ def unparse(ast_obj):
 def main():
     import argparse
 
-    parser = argparse.ArgumentParser(prog='python -m ast')
+    parser = argparse.ArgumentParser()
     parser.add_argument('infile', nargs='?', default='-',
                         help='the file to parse; defaults to stdin')
     parser.add_argument('-m', '--mode', default='exec',
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
index c5350df270487a..585afc85836c06 100644
--- a/Lib/ensurepip/__init__.py
+++ b/Lib/ensurepip/__init__.py
@@ -205,7 +205,7 @@ def _uninstall_helper(*, verbosity=0):
 
 def _main(argv=None):
     import argparse
-    parser = argparse.ArgumentParser(prog="python -m ensurepip")
+    parser = argparse.ArgumentParser()
     parser.add_argument(
         "--version",
         action="version",
diff --git a/Lib/ensurepip/_uninstall.py b/Lib/ensurepip/_uninstall.py
index b257904328d2f5..4183c28a809008 100644
--- a/Lib/ensurepip/_uninstall.py
+++ b/Lib/ensurepip/_uninstall.py
@@ -6,7 +6,7 @@
 
 
 def _main(argv=None):
-    parser = argparse.ArgumentParser(prog="python -m ensurepip._uninstall")
+    parser = argparse.ArgumentParser()
     parser.add_argument(
         "--version",
         action="version",
diff --git a/Lib/json/tool.py b/Lib/json/tool.py
index 9028e517fb9f7d..1ba91384c81f27 100644
--- a/Lib/json/tool.py
+++ b/Lib/json/tool.py
@@ -9,10 +9,9 @@
 
 
 def main():
-    prog = 'python -m json'
     description = ('A simple command line interface for json module '
                    'to validate and pretty-print JSON objects.')
-    parser = argparse.ArgumentParser(prog=prog, description=description)
+    parser = argparse.ArgumentParser(description=description)
     parser.add_argument('infile', nargs='?',
                         help='a JSON file to be validated or pretty-printed',
                         default='-')
diff --git a/Lib/pdb.py b/Lib/pdb.py
index aea6fb70ae3106..d9aed24bfcd8e7 100644
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -2423,8 +2423,7 @@ def help():
 def main():
     import argparse
 
-    parser = argparse.ArgumentParser(prog="pdb",
-                                     usage="%(prog)s [-h] [-c command] (-m 
module | pyfile) [args ...]",
+    parser = argparse.ArgumentParser(usage="%(prog)s [-h] [-c command] (-m 
module | pyfile) [args ...]",
                                      description=_usage,
                                      
formatter_class=argparse.RawDescriptionHelpFormatter,
                                      allow_abbrev=False)
diff --git a/Lib/sqlite3/__main__.py b/Lib/sqlite3/__main__.py
index d9423c25e34135..cfdee61403d1fa 100644
--- a/Lib/sqlite3/__main__.py
+++ b/Lib/sqlite3/__main__.py
@@ -65,7 +65,6 @@ def runsource(self, source, filename="<input>", 
symbol="single"):
 def main(*args):
     parser = ArgumentParser(
         description="Python sqlite3 CLI",
-        prog="python -m sqlite3",
     )
     parser.add_argument(
         "filename", type=str, default=":memory:", nargs="?",
diff --git a/Lib/test/test_sqlite3/test_cli.py 
b/Lib/test/test_sqlite3/test_cli.py
index 303f9e03b5383f..d014a9ce841607 100644
--- a/Lib/test/test_sqlite3/test_cli.py
+++ b/Lib/test/test_sqlite3/test_cli.py
@@ -34,7 +34,9 @@ def expect_failure(self, *args):
 
     def test_cli_help(self):
         out = self.expect_success("-h")
-        self.assertIn("usage: python -m sqlite3", out)
+        self.assertIn("usage: ", out)
+        self.assertIn(" [-h] [-v] [filename] [sql]", out)
+        self.assertIn("Python sqlite3 CLI", out)
 
     def test_cli_version(self):
         out = self.expect_success("-v")
diff --git a/Lib/tokenize.py b/Lib/tokenize.py
index 4b4c3cfe16999b..7ece4e9b70d31b 100644
--- a/Lib/tokenize.py
+++ b/Lib/tokenize.py
@@ -510,7 +510,7 @@ def error(message, filename=None, location=None):
         sys.exit(1)
 
     # Parse the arguments and options
-    parser = argparse.ArgumentParser(prog='python -m tokenize')
+    parser = argparse.ArgumentParser()
     parser.add_argument(dest='filename', nargs='?',
                         metavar='filename.py',
                         help='the file to tokenize; defaults to stdin')
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
index a5cb2bdb064692..a00fa690fa0b88 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -575,8 +575,7 @@ def create(env_dir, system_site_packages=False, clear=False,
 def main(args=None):
     import argparse
 
-    parser = argparse.ArgumentParser(prog=__name__,
-                                     description='Creates virtual Python '
+    parser = argparse.ArgumentParser(description='Creates virtual Python '
                                                  'environments in one or '
                                                  'more target '
                                                  'directories.',
diff --git 
a/Misc/NEWS.d/next/Library/2024-10-01-23-29-09.gh-issue-91818.Kz8cPI.rst 
b/Misc/NEWS.d/next/Library/2024-10-01-23-29-09.gh-issue-91818.Kz8cPI.rst
new file mode 100644
index 00000000000000..f45f00e48a3830
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-10-01-23-29-09.gh-issue-91818.Kz8cPI.rst
@@ -0,0 +1,4 @@
+The CLI of many modules (:mod:`ast`, :mod:`ensurepip`, :mod:`json`,
+:mod:`pdb`, :mod:`sqlite3`, :mod:`tokenize`, :mod:`venv`) now uses the
+actual executable name instead of simply "python" to display in the usage
+message.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to