Issue #20976: pyflakes: Remove unused imports
diff --git a/Lib/_strptime.py b/Lib/_strptime.py
index d101c6d..53bd34b 100644
--- a/Lib/_strptime.py
+++ b/Lib/_strptime.py
@@ -14,7 +14,7 @@
 import locale
 import calendar
 from re import compile as re_compile
-from re import IGNORECASE, ASCII
+from re import IGNORECASE
 from re import escape as re_escape
 from datetime import (date as datetime_date,
                       timedelta as datetime_timedelta,
diff --git a/Lib/asynchat.py b/Lib/asynchat.py
index 0378fa7..f1a5731 100644
--- a/Lib/asynchat.py
+++ b/Lib/asynchat.py
@@ -45,7 +45,6 @@
 method) up to the terminator, and then control will be returned to
 you - by calling your self.found_terminator() method.
 """
-import socket
 import asyncore
 from collections import deque
 
diff --git a/Lib/compileall.py b/Lib/compileall.py
index 07f50aa..d957ee5 100644
--- a/Lib/compileall.py
+++ b/Lib/compileall.py
@@ -12,7 +12,6 @@
 """
 import os
 import sys
-import errno
 import importlib.util
 import py_compile
 import struct
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
index 0cf2076..595113b 100644
--- a/Lib/ctypes/util.py
+++ b/Lib/ctypes/util.py
@@ -85,7 +85,7 @@
 
 elif os.name == "posix":
     # Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump
-    import re, tempfile, errno
+    import re, tempfile
 
     def _findLib_gcc(name):
         expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name)
diff --git a/Lib/decimal.py b/Lib/decimal.py
index 7bc1c94..5b98473 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -142,7 +142,6 @@
                         # See http://speleotrove.com/decimal/
 __libmpdec_version__ = "2.4.0" # compatible libmpdec version
 
-import copy as _copy
 import math as _math
 import numbers as _numbers
 import sys
diff --git a/Lib/difflib.py b/Lib/difflib.py
index e8a3621..38dfef4 100644
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -30,7 +30,6 @@
            'Differ','IS_CHARACTER_JUNK', 'IS_LINE_JUNK', 'context_diff',
            'unified_diff', 'HtmlDiff', 'Match']
 
-import warnings
 import heapq
 from collections import namedtuple as _namedtuple
 
diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py
index 04ab84c..3dc5502 100644
--- a/Lib/email/_header_value_parser.py
+++ b/Lib/email/_header_value_parser.py
@@ -70,7 +70,7 @@
 import re
 import urllib   # For urllib.parse.unquote
 from string import hexdigits
-from collections import namedtuple, OrderedDict
+from collections import OrderedDict
 from email import _encoded_words as _ew
 from email import errors
 from email import utils
diff --git a/Lib/email/generator.py b/Lib/email/generator.py
index e4a86d4..1535210 100644
--- a/Lib/email/generator.py
+++ b/Lib/email/generator.py
@@ -10,14 +10,10 @@
 import sys
 import time
 import random
-import warnings
 
 from copy import deepcopy
 from io import StringIO, BytesIO
-from email._policybase import compat32
-from email.header import Header
 from email.utils import _has_surrogates
-import email.charset as _charset
 
 UNDERSCORE = '_'
 NL = '\n'  # XXX: no longer used by the code below.
diff --git a/Lib/email/header.py b/Lib/email/header.py
index 5bd0638..9c89589 100644
--- a/Lib/email/header.py
+++ b/Lib/email/header.py
@@ -100,7 +100,6 @@
                 words.append((encoded, encoding, charset))
     # Now loop over words and remove words that consist of whitespace
     # between two encoded strings.
-    import sys
     droplist = []
     for n, w in enumerate(words):
         if n>1 and w[1] and words[n-2][1] and words[n-1][0].isspace():
@@ -362,7 +361,6 @@
         for string, charset in self._chunks:
             if hasspace is not None:
                 hasspace = string and self._nonctext(string[0])
-                import sys
                 if lastcs not in (None, 'us-ascii'):
                     if not hasspace or charset not in (None, 'us-ascii'):
                         formatter.add_transition()
diff --git a/Lib/email/mime/text.py b/Lib/email/mime/text.py
index 3b5b09f..ec18b85 100644
--- a/Lib/email/mime/text.py
+++ b/Lib/email/mime/text.py
@@ -6,7 +6,6 @@
 
 __all__ = ['MIMEText']
 
-from email.encoders import encode_7or8bit
 from email.mime.nonmultipart import MIMENonMultipart
 
 
diff --git a/Lib/email/parser.py b/Lib/email/parser.py
index ed512b1..9f5f95d 100644
--- a/Lib/email/parser.py
+++ b/Lib/email/parser.py
@@ -7,11 +7,9 @@
 __all__ = ['Parser', 'HeaderParser', 'BytesParser', 'BytesHeaderParser',
            'FeedParser', 'BytesFeedParser']
 
-import warnings
 from io import StringIO, TextIOWrapper
 
 from email.feedparser import FeedParser, BytesFeedParser
-from email.message import Message
 from email._policybase import compat32
 
 
diff --git a/Lib/email/quoprimime.py b/Lib/email/quoprimime.py
index 30bf916..c1fe2b4 100644
--- a/Lib/email/quoprimime.py
+++ b/Lib/email/quoprimime.py
@@ -40,7 +40,6 @@
     ]
 
 import re
-import io
 
 from string import ascii_letters, digits, hexdigits
 
diff --git a/Lib/email/utils.py b/Lib/email/utils.py
index 95855d8..17f01bc 100644
--- a/Lib/email/utils.py
+++ b/Lib/email/utils.py
@@ -25,13 +25,10 @@
 import os
 import re
 import time
-import base64
 import random
 import socket
 import datetime
 import urllib.parse
-import warnings
-from io import StringIO
 
 from email._parseaddr import quote
 from email._parseaddr import AddressList as _AddressList
diff --git a/Lib/functools.py b/Lib/functools.py
index 2b77f78..b8463ad 100644
--- a/Lib/functools.py
+++ b/Lib/functools.py
@@ -19,7 +19,7 @@
     pass
 from abc import get_cache_token
 from collections import namedtuple
-from types import MappingProxyType, MethodType
+from types import MappingProxyType
 from weakref import WeakKeyDictionary
 try:
     from _thread import RLock
diff --git a/Lib/http/client.py b/Lib/http/client.py
index 763a903..12c1a5f 100644
--- a/Lib/http/client.py
+++ b/Lib/http/client.py
@@ -73,7 +73,6 @@
 import socket
 import collections
 from urllib.parse import urlsplit
-import warnings
 
 __all__ = ["HTTPResponse", "HTTPConnection",
            "HTTPException", "NotConnected", "UnknownProtocol",
diff --git a/Lib/http/server.py b/Lib/http/server.py
index f019bd9..6ce6bda 100644
--- a/Lib/http/server.py
+++ b/Lib/http/server.py
@@ -85,8 +85,6 @@
 __all__ = ["HTTPServer", "BaseHTTPRequestHandler"]
 
 import html
-import email.message
-import email.parser
 import http.client
 import io
 import mimetypes
diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index b882a62..10187e8 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -24,7 +24,7 @@
 To use, simply 'import logging' and log away!
 """
 
-import sys, logging, logging.handlers, socket, struct, traceback, re
+import sys, logging, logging.handlers, struct, traceback, re
 import io
 
 try:
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index b2e7d44..f547d17 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -23,8 +23,7 @@
 To use, simply 'import logging.handlers' and log away!
 """
 
-import errno, logging, socket, os, pickle, struct, time, re
-from codecs import BOM_UTF8
+import logging, socket, os, pickle, struct, time, re
 from stat import ST_DEV, ST_INO, ST_MTIME
 import queue
 try:
diff --git a/Lib/mailbox.py b/Lib/mailbox.py
index dde597c..8a25a19 100644
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -6,7 +6,6 @@
 # or returning from a flush() method.  See functions _sync_flush() and
 # _sync_close().
 
-import sys
 import os
 import time
 import calendar
diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py
index 9b11a69..b4f81ba 100644
--- a/Lib/multiprocessing/connection.py
+++ b/Lib/multiprocessing/connection.py
@@ -14,7 +14,6 @@
 import sys
 import socket
 import struct
-import errno
 import time
 import tempfile
 import itertools
diff --git a/Lib/multiprocessing/heap.py b/Lib/multiprocessing/heap.py
index 98bfdc8..344a45f 100644
--- a/Lib/multiprocessing/heap.py
+++ b/Lib/multiprocessing/heap.py
@@ -8,13 +8,11 @@
 #
 
 import bisect
-import itertools
 import mmap
 import os
 import sys
 import tempfile
 import threading
-import _multiprocessing
 
 from . import context
 from . import reduction
diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py
index 1cb2d95..74d0875 100644
--- a/Lib/multiprocessing/pool.py
+++ b/Lib/multiprocessing/pool.py
@@ -24,7 +24,7 @@
 # If threading is available then ThreadPool should be provided.  Therefore
 # we avoid top-level imports which are liable to fail on some systems.
 from . import util
-from . import get_context, cpu_count, TimeoutError
+from . import get_context, TimeoutError
 
 #
 # Constants representing the state of a pool
diff --git a/Lib/multiprocessing/popen_spawn_posix.py b/Lib/multiprocessing/popen_spawn_posix.py
index 8b5dc42..6b0a8d6 100644
--- a/Lib/multiprocessing/popen_spawn_posix.py
+++ b/Lib/multiprocessing/popen_spawn_posix.py
@@ -1,4 +1,3 @@
-import fcntl
 import io
 import os
 
@@ -8,8 +7,6 @@
 from . import spawn
 from . import util
 
-from . import current_process
-
 __all__ = ['Popen']
 
 
diff --git a/Lib/multiprocessing/reduction.py b/Lib/multiprocessing/reduction.py
index 01e6de2..8f209b4 100644
--- a/Lib/multiprocessing/reduction.py
+++ b/Lib/multiprocessing/reduction.py
@@ -16,7 +16,6 @@
 import sys
 
 from . import context
-from . import util
 
 __all__ = ['send_handle', 'recv_handle', 'ForkingPickler', 'register', 'dump']
 
diff --git a/Lib/multiprocessing/semaphore_tracker.py b/Lib/multiprocessing/semaphore_tracker.py
index ddb2b52..de7738e 100644
--- a/Lib/multiprocessing/semaphore_tracker.py
+++ b/Lib/multiprocessing/semaphore_tracker.py
@@ -11,7 +11,6 @@
 # python" would probably leave unlinked semaphores.
 #
 
-import errno
 import os
 import signal
 import sys
@@ -21,7 +20,6 @@
 
 from . import spawn
 from . import util
-from . import current_process
 
 __all__ = ['ensure_running', 'register', 'unregister']
 
diff --git a/Lib/multiprocessing/synchronize.py b/Lib/multiprocessing/synchronize.py
index 9d8e282..0e3f6ec 100644
--- a/Lib/multiprocessing/synchronize.py
+++ b/Lib/multiprocessing/synchronize.py
@@ -11,10 +11,8 @@
     'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition', 'Event'
     ]
 
-import os
 import threading
 import sys
-import itertools
 import tempfile
 import _multiprocessing
 
diff --git a/Lib/multiprocessing/util.py b/Lib/multiprocessing/util.py
index e476e85..0b695e4 100644
--- a/Lib/multiprocessing/util.py
+++ b/Lib/multiprocessing/util.py
@@ -7,8 +7,6 @@
 # Licensed to PSF under a Contributor Agreement.
 #
 
-import sys
-import functools
 import os
 import itertools
 import weakref
diff --git a/Lib/nntplib.py b/Lib/nntplib.py
index fcb01d3..e2c6579 100644
--- a/Lib/nntplib.py
+++ b/Lib/nntplib.py
@@ -1085,7 +1085,6 @@
 # Test retrieval when run as a script.
 if __name__ == '__main__':
     import argparse
-    from email.utils import parsedate
 
     parser = argparse.ArgumentParser(description="""\
         nntplib built-in demo - display the latest articles in a newsgroup""")
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 9cd0132..3fc2596 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -23,7 +23,7 @@
 
 """
 
-from types import FunctionType, ModuleType
+from types import FunctionType
 from copyreg import dispatch_table
 from copyreg import _extension_registry, _inverted_registry, _extension_cache
 from itertools import islice
diff --git a/Lib/platform.py b/Lib/platform.py
index 11b501e..c4ffe95 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -503,7 +503,6 @@
 
     # Import the needed APIs
     try:
-        import win32api
         from win32api import RegQueryValueEx, RegOpenKeyEx, \
              RegCloseKey, GetVersionEx
         from win32con import HKEY_LOCAL_MACHINE, VER_PLATFORM_WIN32_NT, \
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 505b7cb..006212b 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -66,7 +66,7 @@
 import warnings
 from collections import deque
 from reprlib import Repr
-from traceback import extract_tb, format_exception_only
+from traceback import format_exception_only
 
 
 # --------------------------------------------------------- common routines
diff --git a/Lib/runpy.py b/Lib/runpy.py
index 577deb2..0bb57d7 100644
--- a/Lib/runpy.py
+++ b/Lib/runpy.py
@@ -10,7 +10,6 @@
 #    to implement PEP 338 (Executing Modules as Scripts)
 
 
-import os
 import sys
 import importlib.machinery # importlib first so we can test #15386 via -m
 import importlib.util
diff --git a/Lib/socketserver.py b/Lib/socketserver.py
index e9e4e4e..46ee7c5 100644
--- a/Lib/socketserver.py
+++ b/Lib/socketserver.py
@@ -131,7 +131,6 @@
 
 import socket
 import select
-import sys
 import os
 import errno
 try:
diff --git a/Lib/sre_compile.py b/Lib/sre_compile.py
index 3a5083f..c6860b5 100644
--- a/Lib/sre_compile.py
+++ b/Lib/sre_compile.py
@@ -10,7 +10,7 @@
 
 """Internal support module for sre"""
 
-import _sre, sys
+import _sre
 import sre_parse
 from sre_constants import *
 from _sre import MAXREPEAT
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
index 6583ef6..399e7b7 100644
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -12,8 +12,6 @@
 
 # XXX: show string offset and offending character for all errors
 
-import sys
-
 from sre_constants import *
 from _sre import MAXREPEAT
 
diff --git a/Lib/ssl.py b/Lib/ssl.py
index 4408e7b..87b70fa 100644
--- a/Lib/ssl.py
+++ b/Lib/ssl.py
@@ -147,12 +147,9 @@
 if sys.platform == "win32":
     from _ssl import enum_certificates, enum_crls
 
-from socket import getnameinfo as _getnameinfo
-from socket import SHUT_RDWR as _SHUT_RDWR
 from socket import socket, AF_INET, SOCK_STREAM, create_connection
 from socket import SOL_SOCKET, SO_TYPE
 import base64        # for DER-to-PEM translation
-import traceback
 import errno
 
 
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index d629bdf..38f0f18 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -350,8 +350,6 @@
 import io
 import os
 import time
-import traceback
-import gc
 import signal
 import builtins
 import warnings
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 3409efe..0a90257 100755
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -65,8 +65,6 @@
 # from tarfile import *
 __all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError"]
 
-from builtins import open as _open # Since 'open' is TarFile.open
-
 #---------------------------------------------------------
 # tar constants
 #---------------------------------------------------------
diff --git a/Lib/threading.py b/Lib/threading.py
index 5d68a9e..3407083 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -3,7 +3,6 @@
 import sys as _sys
 import _thread
 
-from time import sleep as _sleep
 try:
     from time import monotonic as _time
 except ImportError:
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index 5d6f31b..4ac4e57a 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -35,8 +35,6 @@
     # Attempt to configure Tcl/Tk without requiring PATH
     from tkinter import _fix
 
-import warnings
-
 import _tkinter # If this fails your Python may not be configured for Tk
 TclError = _tkinter.TclError
 from tkinter.constants import *
diff --git a/Lib/tkinter/tix.py b/Lib/tkinter/tix.py
index 131aa06..c1cdfa7 100644
--- a/Lib/tkinter/tix.py
+++ b/Lib/tkinter/tix.py
@@ -27,7 +27,7 @@
 #
 
 from tkinter import *
-from tkinter import _flatten, _cnfmerge, _default_root
+from tkinter import _cnfmerge, _default_root
 
 # WARNING - TkVersion is a limited precision floating point number
 if TkVersion < 3.999:
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
index 3b5f5fa..bbdd911 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -32,7 +32,6 @@
 import shutil
 import subprocess
 import sys
-import sysconfig
 import types
 
 logger = logging.getLogger(__name__)
diff --git a/Lib/xmlrpc/client.py b/Lib/xmlrpc/client.py
index 1238b9b..c2ae707 100644
--- a/Lib/xmlrpc/client.py
+++ b/Lib/xmlrpc/client.py
@@ -134,7 +134,6 @@
 import http.client
 import urllib.parse
 from xml.parsers import expat
-import socket
 import errno
 from io import BytesIO
 try: