bpo-30166: Import command-line parsing modules only when needed. (#1293)

diff --git a/Lib/code.py b/Lib/code.py
index 23295f4..d8106ae 100644
--- a/Lib/code.py
+++ b/Lib/code.py
@@ -7,7 +7,6 @@
 
 import sys
 import traceback
-import argparse
 from codeop import CommandCompiler, compile_command
 
 __all__ = ["InteractiveInterpreter", "InteractiveConsole", "interact",
@@ -303,6 +302,8 @@
 
 
 if __name__ == "__main__":
+    import argparse
+
     parser = argparse.ArgumentParser()
     parser.add_argument('-q', action='store_true',
                        help="don't print version and copyright messages")
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 0b78544..5e5bc21 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -93,7 +93,6 @@
 ]
 
 import __future__
-import argparse
 import difflib
 import inspect
 import linecache
@@ -2741,6 +2740,8 @@
 
 
 def _test():
+    import argparse
+
     parser = argparse.ArgumentParser(description="doctest runner")
     parser.add_argument('-v', '--verbose', action='store_true', default=False,
                         help='print very verbose output for all tests')
diff --git a/Lib/http/server.py b/Lib/http/server.py
index 429490b..7b3e701 100644
--- a/Lib/http/server.py
+++ b/Lib/http/server.py
@@ -87,7 +87,6 @@
     "SimpleHTTPRequestHandler", "CGIHTTPRequestHandler",
 ]
 
-import argparse
 import copy
 import datetime
 import email.utils
@@ -1227,6 +1226,8 @@
             sys.exit(0)
 
 if __name__ == '__main__':
+    import argparse
+
     parser = argparse.ArgumentParser()
     parser.add_argument('--cgi', action='store_true',
                        help='Run as CGI Server')
diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py
index 8ddc189..5b0e5b2 100755
--- a/Lib/idlelib/pyshell.py
+++ b/Lib/idlelib/pyshell.py
@@ -18,11 +18,10 @@
     raise SystemExit(1)
 
 from code import InteractiveInterpreter
-import getopt
 import linecache
 import os
 import os.path
-from platform import python_version, system
+from platform import python_version
 import re
 import socket
 import subprocess
@@ -31,14 +30,12 @@
 import tokenize
 import warnings
 
-from idlelib import testing  # bool value
 from idlelib.colorizer import ColorDelegator
 from idlelib.config import idleConf
 from idlelib import debugger
 from idlelib import debugger_r
 from idlelib.editor import EditorWindow, fixwordbreaks
 from idlelib.filelist import FileList
-from idlelib import macosx
 from idlelib.outwin import OutputWindow
 from idlelib import rpc
 from idlelib.run import idle_formatwarning, PseudoInputFile, PseudoOutputFile
@@ -1371,6 +1368,11 @@
 """
 
 def main():
+    import getopt
+    from platform import system
+    from idlelib import testing  # bool value
+    from idlelib import macosx
+
     global flist, root, use_subprocess
 
     capture_warnings(True)
diff --git a/Lib/profile.py b/Lib/profile.py
index 5d0e968..5ceeddc 100755
--- a/Lib/profile.py
+++ b/Lib/profile.py
@@ -25,10 +25,8 @@
 
 
 import sys
-import os
 import time
 import marshal
-from optparse import OptionParser
 
 __all__ = ["run", "runctx", "Profile"]
 
@@ -179,7 +177,7 @@
         self.t = self.get_time()
         self.simulate_call('profiler')
 
-    # Heavily optimized dispatch routine for os.times() timer
+    # Heavily optimized dispatch routine for time.process_time() timer
 
     def trace_dispatch(self, frame, event, arg):
         timer = self.timer
@@ -552,6 +550,9 @@
 #****************************************************************************
 
 def main():
+    import os
+    from optparse import OptionParser
+
     usage = "profile.py [-o output_file_path] [-s sort] scriptfile [arg] ..."
     parser = OptionParser(usage=usage)
     parser.allow_interspersed_args = False
diff --git a/Lib/tabnanny.py b/Lib/tabnanny.py
index bfb670c..7973f26 100755
--- a/Lib/tabnanny.py
+++ b/Lib/tabnanny.py
@@ -22,7 +22,6 @@
 
 import os
 import sys
-import getopt
 import tokenize
 if not hasattr(tokenize, 'NL'):
     raise ValueError("tokenize.NL doesn't exist -- tokenize module too old")
@@ -40,6 +39,8 @@
     sys.stderr.write("\n")
 
 def main():
+    import getopt
+
     global verbose, filename_only
     try:
         opts, args = getopt.getopt(sys.argv[1:], "qv")
diff --git a/Lib/trace.py b/Lib/trace.py
index ae15461..e443edd 100755
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -48,7 +48,7 @@
   r.write_results(show_missing=True, coverdir="/tmp")
 """
 __all__ = ['Trace', 'CoverageResults']
-import argparse
+
 import linecache
 import os
 import re
@@ -609,6 +609,7 @@
                                callers=self._callers)
 
 def main():
+    import argparse
 
     parser = argparse.ArgumentParser()
     parser.add_argument('--version', action='version', version='trace 2.0')