diff --git a/build_files/cmake/cmake_static_check_clang_array.py b/build_files/cmake/cmake_static_check_clang_array.py
index 02498893c919c0c09b486e2e8dd1d2a835365929..13a833efe80dc26c4fd48e694f20baccbeb32c9b 100644
--- a/build_files/cmake/cmake_static_check_clang_array.py
+++ b/build_files/cmake/cmake_static_check_clang_array.py
@@ -10,9 +10,6 @@ import os
 
 from typing import (
     Any,
-    Callable,
-    List,
-    Tuple,
 )
 
 
diff --git a/build_files/utils/make_source_archive.py b/build_files/utils/make_source_archive.py
index d5590e4bc00b57c2f9cdc71bc2167fc160bcf587..b8964b38fd0ea85696ff865129e4b8284cf30197 100755
--- a/build_files/utils/make_source_archive.py
+++ b/build_files/utils/make_source_archive.py
@@ -6,7 +6,6 @@
 import argparse
 import make_utils
 import os
-import re
 import subprocess
 import sys
 from pathlib import Path
diff --git a/scripts/freestyle/modules/parameter_editor.py b/scripts/freestyle/modules/parameter_editor.py
index d598c4a097efb1c0a53a05ace1c41b719530e250..14b03d0ab626aa470167a7ca1cca8c1c9670c038 100644
--- a/scripts/freestyle/modules/parameter_editor.py
+++ b/scripts/freestyle/modules/parameter_editor.py
@@ -97,11 +97,10 @@ from _freestyle import (
 
 import time
 import bpy
-import random
 
 from mathutils import Vector
-from math import pi, sin, cos, acos, radians, atan2
-from itertools import cycle, tee
+from math import pi, sin, cos, acos, radians
+from itertools import cycle
 
 # WARNING: highly experimental, not a stable API
 # lists of callback functions
diff --git a/scripts/modules/bl_i18n_utils/utils_languages_menu.py b/scripts/modules/bl_i18n_utils/utils_languages_menu.py
index 89b411d369649a623c2bf8fc6c483b2742ffcc62..f15c59ad3caff068561ff81dc918ada89eb8e3d7 100755
--- a/scripts/modules/bl_i18n_utils/utils_languages_menu.py
+++ b/scripts/modules/bl_i18n_utils/utils_languages_menu.py
@@ -5,9 +5,6 @@
 # Update "languages" text file used by Blender at runtime to build translations menu.
 
 
-import os
-
-
 OK = 0
 MISSING = 1
 TOOLOW = 2
diff --git a/tests/python/bl_blendfile_versioning.py b/tests/python/bl_blendfile_versioning.py
index 6ceedb501f1f1352f16906e8e4303b8ac8a3ae0e..d47d3bc208e3520439710ce80cb18653ae3cd32d 100644
--- a/tests/python/bl_blendfile_versioning.py
+++ b/tests/python/bl_blendfile_versioning.py
@@ -53,7 +53,6 @@ class TestBlendFileOpenAllTestFiles(TestHelper):
                     yield dir_entry.path
 
     def test_open(self):
-        import subprocess
         blendfile_paths = [p for p in self.iter_blendfiles_from_directory(self.args.src_test_dir)]
         # `os.scandir()` used by `iter_blendfiles_from_directory` does not
         # guarantee any form of order.
diff --git a/tests/python/bl_node_field_type_inference.py b/tests/python/bl_node_field_type_inference.py
index e38ece234107f5fba7331166772b0a5ae6158c6d..4fc37f990093f749a421c1a7fe7ea2e943517609 100644
--- a/tests/python/bl_node_field_type_inference.py
+++ b/tests/python/bl_node_field_type_inference.py
@@ -6,8 +6,6 @@ import pathlib
 import sys
 import unittest
 import tempfile
-import math
-from dataclasses import dataclass
 
 import bpy
 
diff --git a/tools/check_blender_release/check_release.py b/tools/check_blender_release/check_release.py
index 92e6943d3f7b8f450d5501bd682c443d63dbda1f..d1a45c56d4ef9f10cf1024afdd5d57aab3677ebb 100755
--- a/tools/check_blender_release/check_release.py
+++ b/tools/check_blender_release/check_release.py
@@ -5,9 +5,6 @@
 
 # Usage: ./check_release.py -- ../path/to/release/folder
 
-
-import os
-import sys
 import unittest
 
 import check_module_enabled
diff --git a/tools/check_docs/check_docs_code_layout.py b/tools/check_docs/check_docs_code_layout.py
index 09d07c95f57a91667f316efdb0acacf3a8ecefac..627c09eb2434124f177515a37b8b4904608000f4 100644
--- a/tools/check_docs/check_docs_code_layout.py
+++ b/tools/check_docs/check_docs_code_layout.py
@@ -16,13 +16,11 @@ check_docs_code_layout.py --markdown=markdown.txt
 """
 
 import os
-import re
 import argparse
 
 from typing import (
     List,
     Optional,
-    Tuple,
 )
 
 
diff --git a/tools/check_source/check_spelling.py b/tools/check_source/check_spelling.py
index 99f265c67cee1c2d13d97ed8f0edaf5dadabcd57..8286789d35ad1ce52c95e7bf2f0ae10bf7eca69d 100755
--- a/tools/check_source/check_spelling.py
+++ b/tools/check_source/check_spelling.py
@@ -308,7 +308,6 @@ class Comment:
 
 
 def extract_code_strings(filepath: str) -> Tuple[List[Comment], Set[str]]:
-    import pygments
     from pygments import lexers
     from pygments.token import Token
 
diff --git a/tools/utils/gitea_inactive_developers.py b/tools/utils/gitea_inactive_developers.py
index bbd5698e416e8c577759679de238a39c7e8e0b73..498b9fe48723aae28f12388cb2ee360bc1a5b74b 100755
--- a/tools/utils/gitea_inactive_developers.py
+++ b/tools/utils/gitea_inactive_developers.py
@@ -11,7 +11,6 @@
 # * 403 Client Error: That means the token doesn't have the right scope.
 # * 500 Server Error: The token is invalid.
 
-import csv
 import logging
 import os
 import requests