https://github.com/python/cpython/commit/627adb517f71b16273845fa47acee72b2ea372a0
commit: 627adb517f71b16273845fa47acee72b2ea372a0
branch: main
author: Hugo van Kemenade <[email protected]>
committer: hugovk <[email protected]>
date: 2026-06-16T19:31:01+03:00
summary:

gh-151428: Remove unused imports from stdlib (#151478)

files:
A Lib/.ruff.toml
A Tools/.ruff.toml
M .pre-commit-config.yaml
M Lib/_pyrepl/completing_reader.py
M Lib/_pyrepl/reader.py
M Lib/_pyrepl/unix_console.py
M Lib/idlelib/idle_test/template.py
M Lib/idlelib/idle_test/test_help.py
M Lib/profiling/sampling/heatmap_collector.py
M Lib/profiling/sampling/live_collector/collector.py
M Lib/profiling/sampling/live_collector/display.py
M Lib/profiling/sampling/live_collector/widgets.py
M Lib/profiling/sampling/sample.py

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6878a7d92e3beeb..6c7f1b93e66e879 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,6 +1,6 @@
 repos:
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: e05c5c0818279e5ac248ac9e954431ba58865e61  # frozen: v0.15.7
+    rev: 3b3f7c3f57fe9925356faf5fe6230835138be230  # frozen: v0.15.17
     hooks:
       - id: ruff-check
         name: Run Ruff (lint) on Platforms/Apple/
@@ -10,6 +10,11 @@ repos:
         name: Run Ruff (lint) on Doc/
         args: [--exit-non-zero-on-fix]
         files: ^Doc/
+      - id: ruff-check
+        name: Run Ruff (lint) on Lib/
+        args: [--exit-non-zero-on-fix]
+        files: ^Lib/
+        exclude: ^Lib/test/
       - id: ruff-check
         name: Run Ruff (lint) on Lib/test/
         args: [--exit-non-zero-on-fix]
@@ -18,6 +23,11 @@ repos:
         name: Run Ruff (lint) on Platforms/WASI/
         args: [--exit-non-zero-on-fix, --config=Platforms/WASI/.ruff.toml]
         files: ^Platforms/WASI/
+      - id: ruff-check
+        name: Run Ruff (lint) on Tools/
+        args: [--exit-non-zero-on-fix]
+        files: ^Tools/
+        exclude: ^Tools/(build|clinic|i18n|peg_generator|wasm)/
       - id: ruff-check
         name: Run Ruff (lint) on Tools/build/
         args: [--exit-non-zero-on-fix, --config=Tools/build/.ruff.toml]
diff --git a/Lib/.ruff.toml b/Lib/.ruff.toml
new file mode 100644
index 000000000000000..c9ae9b95641b318
--- /dev/null
+++ b/Lib/.ruff.toml
@@ -0,0 +1,21 @@
+extend = "../.ruff.toml"  # Inherit the project-wide settings
+
+# Unlike Tools/, stdlib can use newer syntax than PYTHON_FOR_REGEN
+target-version = "py315"
+
+[lint]
+select = [
+    "F401",  # Unused import
+]
+
+[lint.per-file-ignores]
+"ctypes/__init__.py" = ["F401"]  # Re-exports from _ctypes
+"ensurepip/__init__.py" = ["F401"]  # `import zlib` availability check
+"idlelib/idle_test/htest.py" = ["F401"]  # Import for Windows DPI side effect
+"idlelib/idle_test/test_iomenu.py" = ["F401"]  # Imports checked for existence
+"importlib/_abc.py" = ["F401"]  # Bootstrap-sensitive _bootstrap import
+"importlib/machinery.py" = ["F401"]  # NamespacePath re-export
+"importlib/metadata/__init__.py" = ["F401"]  # Synced from importlib_metadata
+"profiling/sampling/sample.py" = ["F401"]  # Re-exports PROFILING_MODE_* 
constants
+"ssl.py" = ["F401"]  # Re-exports from _ssl
+"warnings.py" = ["F401"]  # Re-exports from _py_warnings
diff --git a/Lib/_pyrepl/completing_reader.py b/Lib/_pyrepl/completing_reader.py
index f783e8db36b0287..7eb3ebac84124b5 100644
--- a/Lib/_pyrepl/completing_reader.py
+++ b/Lib/_pyrepl/completing_reader.py
@@ -32,7 +32,7 @@
 # types
 Command = commands.Command
 if TYPE_CHECKING:
-    from .types import CommandName, CompletionAction, Keymap, KeySpec
+    from .types import CompletionAction, Keymap
 
 
 def prefix(wordlist: list[str], j: int = 0) -> str:
diff --git a/Lib/_pyrepl/reader.py b/Lib/_pyrepl/reader.py
index 7e4dd801c84d5c2..832e67b534f2969 100644
--- a/Lib/_pyrepl/reader.py
+++ b/Lib/_pyrepl/reader.py
@@ -38,7 +38,7 @@
 )
 from .layout import LayoutMap, LayoutResult, LayoutRow, WrappedRow, 
layout_content_lines
 from .render import RenderCell, RenderLine, RenderedScreen, ScreenOverlay
-from .utils import ANSI_ESCAPE_SEQUENCE, ColorSpan, THEME, StyleRef, wlen, 
gen_colors
+from .utils import ANSI_ESCAPE_SEQUENCE, ColorSpan, THEME, StyleRef, gen_colors
 from .trace import trace
 
 
diff --git a/Lib/_pyrepl/unix_console.py b/Lib/_pyrepl/unix_console.py
index 9c4644db53e3436..9a4f8e0c623abfa 100644
--- a/Lib/_pyrepl/unix_console.py
+++ b/Lib/_pyrepl/unix_console.py
@@ -34,7 +34,7 @@
 from collections.abc import Callable
 from dataclasses import dataclass
 from fcntl import ioctl
-from typing import TYPE_CHECKING, cast, overload
+from typing import TYPE_CHECKING, overload
 
 from . import terminfo
 from .console import Console, Event
diff --git a/Lib/idlelib/idle_test/template.py 
b/Lib/idlelib/idle_test/template.py
index 725a55b9c47230c..6e98556458ec588 100644
--- a/Lib/idlelib/idle_test/template.py
+++ b/Lib/idlelib/idle_test/template.py
@@ -1,6 +1,5 @@
 "Test , coverage %."
 
-from idlelib import zzdummy
 import unittest
 from test.support import requires
 from tkinter import Tk
diff --git a/Lib/idlelib/idle_test/test_help.py 
b/Lib/idlelib/idle_test/test_help.py
index ebb02b5c0d8356a..ebbaceb2eb7bbfd 100644
--- a/Lib/idlelib/idle_test/test_help.py
+++ b/Lib/idlelib/idle_test/test_help.py
@@ -4,7 +4,6 @@
 import unittest
 from test.support import requires
 requires('gui')
-from os.path import abspath, dirname, join
 from tkinter import Tk
 
 
diff --git a/Lib/profiling/sampling/heatmap_collector.py 
b/Lib/profiling/sampling/heatmap_collector.py
index 6e650ec08f410bc..78f1e39f6a002d0 100644
--- a/Lib/profiling/sampling/heatmap_collector.py
+++ b/Lib/profiling/sampling/heatmap_collector.py
@@ -5,11 +5,9 @@
 import html
 import importlib.resources
 import json
-import locale
 import math
 import os
 import platform
-import site
 import sys
 from dataclasses import dataclass, field
 from pathlib import Path
diff --git a/Lib/profiling/sampling/live_collector/collector.py 
b/Lib/profiling/sampling/live_collector/collector.py
index a53cfc6b719a105..2805134f239eb38 100644
--- a/Lib/profiling/sampling/live_collector/collector.py
+++ b/Lib/profiling/sampling/live_collector/collector.py
@@ -18,9 +18,6 @@
     THREAD_STATUS_UNKNOWN,
     THREAD_STATUS_GIL_REQUESTED,
     THREAD_STATUS_HAS_EXCEPTION,
-    PROFILING_MODE_CPU,
-    PROFILING_MODE_GIL,
-    PROFILING_MODE_WALL,
 )
 from .constants import (
     MICROSECONDS_PER_SECOND,
diff --git a/Lib/profiling/sampling/live_collector/display.py 
b/Lib/profiling/sampling/live_collector/display.py
index f5324421b102111..ec7e39c02963056 100644
--- a/Lib/profiling/sampling/live_collector/display.py
+++ b/Lib/profiling/sampling/live_collector/display.py
@@ -1,6 +1,5 @@
 """Display interface abstractions for the live profiling collector."""
 
-import contextlib
 import curses
 from abc import ABC, abstractmethod
 
diff --git a/Lib/profiling/sampling/live_collector/widgets.py 
b/Lib/profiling/sampling/live_collector/widgets.py
index 86d2649f875e622..7535d0c753b0465 100644
--- a/Lib/profiling/sampling/live_collector/widgets.py
+++ b/Lib/profiling/sampling/live_collector/widgets.py
@@ -1,7 +1,6 @@
 """Widget classes for the live profiling collector UI."""
 
 import curses
-import time
 from abc import ABC, abstractmethod
 
 from .constants import (
@@ -13,24 +12,14 @@
     WIDTH_THRESHOLD_CUMUL_PCT,
     WIDTH_THRESHOLD_CUMTIME,
     MICROSECONDS_PER_SECOND,
-    DISPLAY_UPDATE_INTERVAL_SEC,
     MIN_BAR_WIDTH,
     MAX_SAMPLE_RATE_BAR_WIDTH,
     MAX_EFFICIENCY_BAR_WIDTH,
     MIN_SAMPLE_RATE_FOR_SCALING,
     FOOTER_LINES,
-    FINISHED_BANNER_EXTRA_LINES,
     OPCODE_PANEL_HEIGHT,
 )
-from ..constants import (
-    THREAD_STATUS_HAS_GIL,
-    THREAD_STATUS_ON_CPU,
-    THREAD_STATUS_UNKNOWN,
-    THREAD_STATUS_GIL_REQUESTED,
-    PROFILING_MODE_CPU,
-    PROFILING_MODE_GIL,
-    PROFILING_MODE_WALL,
-)
+from ..constants import PROFILING_MODE_GIL
 from ..opcode_utils import get_opcode_info, format_opcode
 
 
diff --git a/Lib/profiling/sampling/sample.py b/Lib/profiling/sampling/sample.py
index 50ccc57566d70d3..6cb6dd483520887 100644
--- a/Lib/profiling/sampling/sample.py
+++ b/Lib/profiling/sampling/sample.py
@@ -8,10 +8,6 @@
 from collections import deque
 lazy from _colorize import ANSIColors
 
-from .pstats_collector import PstatsCollector
-from .stack_collector import CollapsedStackCollector, FlamegraphCollector
-from .heatmap_collector import HeatmapCollector
-from .gecko_collector import GeckoCollector
 from .binary_collector import BinaryCollector
 
 
diff --git a/Tools/.ruff.toml b/Tools/.ruff.toml
new file mode 100644
index 000000000000000..fd9cde5e6cad650
--- /dev/null
+++ b/Tools/.ruff.toml
@@ -0,0 +1,14 @@
+extend = "../.ruff.toml"  # Inherit the project-wide settings
+
+[per-file-target-version]
+"jit/*.py" = "py312"  # Reused-quote f-strings (PEP 701)
+
+[lint]
+select = [
+    "F401",  # Unused import
+]
+
+[lint.per-file-ignores]
+"c-analyzer/c_parser/__init__.py" = ["F401"]  # Re-exports from submodules
+"c-analyzer/c_parser/preprocessor/__init__.py" = ["F401"]  # Re-exports from 
submodules
+"c-analyzer/c_parser/preprocessor/common.py" = ["F401"]  # Re-exported by 
preprocessor/__init__.py

_______________________________________________
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