From 7e4db2f253c555568d56177c2fd083bcf8f88d34 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 4 May 2017 08:17:47 +0300 Subject: [PATCH] bpo-30166: Import command-line parsing modules only when needed. (#1293) --- Lib/code.py | 3 ++- Lib/doctest.py | 3 ++- Lib/http/server.py | 3 ++- Lib/idlelib/pyshell.py | 10 ++++++---- Lib/profile.py | 7 ++++--- Lib/tabnanny.py | 3 ++- Lib/trace.py | 3 ++- 7 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Lib/code.py b/Lib/code.py index 23295f4cf5..d8106ae612 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 @@ def interact(banner=None, readfunc=None, local=None, exitmsg=None): 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 0b78544d8d..5e5bc21a03 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -93,7 +93,6 @@ __all__ = [ ] import __future__ -import argparse import difflib import inspect import linecache @@ -2741,6 +2740,8 @@ __test__ = {"_TestClass": _TestClass, 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 429490b73a..7b3e701fb7 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -87,7 +87,6 @@ __all__ = [ "SimpleHTTPRequestHandler", "CGIHTTPRequestHandler", ] -import argparse import copy import datetime import email.utils @@ -1227,6 +1226,8 @@ def test(HandlerClass=BaseHTTPRequestHandler, 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 8ddc18951c..5b0e5b2676 100755 --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -18,11 +18,10 @@ if TkVersion < 8.5: 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 time 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 @@ echo "import sys; print(sys.argv)" | idle - "foobar" """ 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 5d0e9685a4..5ceeddc075 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 @@ class Profile: 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 @@ class Profile: #**************************************************************************** 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 bfb670c902..7973f26f98 100755 --- a/Lib/tabnanny.py +++ b/Lib/tabnanny.py @@ -22,7 +22,6 @@ __version__ = "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 @@ def errprint(*args): 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 ae154615fa..e443edd606 100755 --- a/Lib/trace.py +++ b/Lib/trace.py @@ -48,7 +48,7 @@ Sample use, programmatically r.write_results(show_missing=True, coverdir="/tmp") """ __all__ = ['Trace', 'CoverageResults'] -import argparse + import linecache import os import re @@ -609,6 +609,7 @@ class Trace: callers=self._callers) def main(): + import argparse parser = argparse.ArgumentParser() parser.add_argument('--version', action='version', version='trace 2.0') -- 2.40.0