diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 347348a..87aa63c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -22,22 +22,17 @@ repos:
     -   id: python-no-log-warn
     -   id: python-use-type-annotations
     -   id: text-unicode-replacement-char
--   repo: https://github.com/asottile/reorder-python-imports
-    rev: v3.12.0
-    hooks:
-    -   id: reorder-python-imports
-        args: [--py38-plus, --add-import, 'from __future__ import annotations']
 -   repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.1.11
+    rev: v0.3.3
     hooks:
       - id: ruff
       - id: ruff-format
 -   repo: https://github.com/dosisod/refurb
-    rev: v1.27.0
+    rev: v2.0.0
     hooks:
     -   id: refurb
 -   repo: https://github.com/kynan/nbstripout
-    rev: 0.6.1
+    rev: 0.7.1
     hooks:
     -   id: nbstripout
 -   repo: https://github.com/executablebooks/mdformat
@@ -54,7 +49,7 @@ repos:
   hooks:
     -   id: codespell
 -   repo: https://github.com/pre-commit/mirrors-mypy
-    rev: 'v1.8.0'
+    rev: 'v1.9.0'
     hooks:
     -   id: mypy
         args: [
diff --git a/pyproject.toml b/pyproject.toml
index df23f52..4d65dd2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -81,21 +81,18 @@ no_implicit_optional = true
 warn_redundant_casts = true
 warn_unused_ignores = true
 
-
 [[tool.mypy.overrides]]
 module = "tests.*"
 disallow_untyped_defs = false
 ignore_errors = true
 
-
 [tool.ruff]
 target-version = "py38"
-select = ["ALL"]
 fix = true
+unsafe-fixes = true
+
+[tool.ruff.lint]
 extend-ignore = [
-    "I",  # ignore isort
-    "TRY",  # ignore tryceratops.
-    "TCH",  # ignore non-guarded type imports.
     # Others.
     "ANN101",  # type annotating self
     "ANN102",  # type annotating cls
@@ -103,16 +100,17 @@ extend-ignore = [
     "COM812",  # Comply with ruff-format.
     "ISC001",  # Comply with ruff-format.
 ]
+select = ["ALL"]
 
-
-[tool.ruff.per-file-ignores]
+[tool.ruff.lint.per-file-ignores]
 "tests/*" = ["D", "ANN", "PLR2004", "S101"]
 
+[tool.ruff.lint.isort]
+force-single-line = true
 
-[tool.ruff.pydocstyle]
+[tool.ruff.lint.pydocstyle]
 convention = "numpy"
 
-
 [tool.pytest.ini_options]
 # Do not add src since it messes with the loading of pytask-parallel as a plugin.
 testpaths = ["tests"]
@@ -123,3 +121,11 @@ markers = [
     "end_to_end: Flag for tests that cover the whole program.",
 ]
 norecursedirs = [".idea", ".tox"]
+
+[tool.coverage.report]
+exclude_also = [
+    "pragma: no cover",
+    "if TYPE_CHECKING.*:",
+    "\\.\\.\\.",
+    "def __repr__",
+]
diff --git a/src/pytask_parallel/__init__.py b/src/pytask_parallel/__init__.py
index b940c76..c937a1f 100644
--- a/src/pytask_parallel/__init__.py
+++ b/src/pytask_parallel/__init__.py
@@ -1,4 +1,5 @@
 """Contains the main namespace of the package."""
+
 from __future__ import annotations
 
 try:
diff --git a/src/pytask_parallel/backends.py b/src/pytask_parallel/backends.py
index 981f2a0..7cefeb9 100644
--- a/src/pytask_parallel/backends.py
+++ b/src/pytask_parallel/backends.py
@@ -1,4 +1,5 @@
 """Configures the available backends."""
+
 from __future__ import annotations
 
 import enum
diff --git a/src/pytask_parallel/build.py b/src/pytask_parallel/build.py
index b6542f3..6ba44ae 100644
--- a/src/pytask_parallel/build.py
+++ b/src/pytask_parallel/build.py
@@ -1,9 +1,11 @@
 """Extend the build command."""
+
 from __future__ import annotations
 
 import click
 from pytask import EnumChoice
 from pytask import hookimpl
+
 from pytask_parallel.backends import PARALLEL_BACKENDS_DEFAULT
 from pytask_parallel.backends import ParallelBackend
 
diff --git a/src/pytask_parallel/config.py b/src/pytask_parallel/config.py
index cf840a5..7e4dd2e 100644
--- a/src/pytask_parallel/config.py
+++ b/src/pytask_parallel/config.py
@@ -1,4 +1,5 @@
 """Configure pytask."""
+
 from __future__ import annotations
 
 import enum
@@ -6,6 +7,7 @@
 from typing import Any
 
 from pytask import hookimpl
+
 from pytask_parallel.backends import ParallelBackend
 
 
diff --git a/src/pytask_parallel/execute.py b/src/pytask_parallel/execute.py
index ce6d642..1632deb 100644
--- a/src/pytask_parallel/execute.py
+++ b/src/pytask_parallel/execute.py
@@ -1,43 +1,49 @@
 """Contains code relevant to the execution."""
+
 from __future__ import annotations
 
 import inspect
 import sys
 import time
 import warnings
-from concurrent.futures import Future
 from functools import partial
-from pathlib import Path
-from types import ModuleType
-from types import TracebackType
+from typing import TYPE_CHECKING
 from typing import Any
 from typing import Callable
 
 import cloudpickle
 from attrs import define
 from attrs import field
-from pytask import console
 from pytask import ExecutionReport
-from pytask import get_marks
-from pytask import hookimpl
 from pytask import Mark
-from pytask import parse_warning_filter
 from pytask import PNode
 from pytask import PTask
 from pytask import PythonNode
-from pytask import remove_internal_traceback_frames_from_exc_info
 from pytask import Session
 from pytask import Task
-from pytask import warning_record_to_str
 from pytask import WarningReport
+from pytask import console
+from pytask import get_marks
+from pytask import hookimpl
+from pytask import parse_warning_filter
+from pytask import remove_internal_traceback_frames_from_exc_info
+from pytask import warning_record_to_str
 from pytask.tree_util import PyTree
 from pytask.tree_util import tree_leaves
 from pytask.tree_util import tree_map
 from pytask.tree_util import tree_structure
+from rich.traceback import Traceback
+
 from pytask_parallel.backends import PARALLEL_BACKENDS
 from pytask_parallel.backends import ParallelBackend
-from rich.console import ConsoleOptions
-from rich.traceback import Traceback
+
+if TYPE_CHECKING:
+    from concurrent.futures import Future
+    from pathlib import Path
+    from types import ModuleType
+    from types import TracebackType
+
+    from rich.console import ConsoleOptions
 
 
 @hookimpl
diff --git a/src/pytask_parallel/logging.py b/src/pytask_parallel/logging.py
index 1cdba94..8ee5131 100644
--- a/src/pytask_parallel/logging.py
+++ b/src/pytask_parallel/logging.py
@@ -1,9 +1,10 @@
 """Contains code relevant to logging."""
+
 from __future__ import annotations
 
+from pytask import Session
 from pytask import console
 from pytask import hookimpl
-from pytask import Session
 
 
 @hookimpl(trylast=True)
diff --git a/src/pytask_parallel/plugin.py b/src/pytask_parallel/plugin.py
index 88fffee..8ccf789 100644
--- a/src/pytask_parallel/plugin.py
+++ b/src/pytask_parallel/plugin.py
@@ -1,13 +1,19 @@
 """Entry-point for the plugin."""
+
 from __future__ import annotations
 
-from pluggy import PluginManager
+from typing import TYPE_CHECKING
+
 from pytask import hookimpl
+
 from pytask_parallel import build
 from pytask_parallel import config
 from pytask_parallel import execute
 from pytask_parallel import logging
 
+if TYPE_CHECKING:
+    from pluggy import PluginManager
+
 
 @hookimpl
 def pytask_add_hooks(pm: PluginManager) -> None:
diff --git a/tests/conftest.py b/tests/conftest.py
index ef47c25..cedd5f8 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -15,7 +15,7 @@ class SysPathsSnapshot:
     """A snapshot for sys.path."""
 
     def __init__(self) -> None:
-        self.__saved = list(sys.path), list(sys.meta_path)
+        self.__saved = sys.path.copy(), sys.meta_path.copy()
 
     def restore(self) -> None:
         sys.path[:], sys.meta_path[:] = self.__saved
@@ -26,7 +26,7 @@ class SysModulesSnapshot:
 
     def __init__(self, preserve: Callable[[str], bool] | None = None) -> None:
         self.__preserve = preserve
-        self.__saved = dict(sys.modules)
+        self.__saved = sys.modules.copy()
 
     def restore(self) -> None:
         if self.__preserve:
diff --git a/tests/test_config.py b/tests/test_config.py
index f173a73..f73fded 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -4,8 +4,8 @@
 import textwrap
 
 import pytest
-from pytask import build
 from pytask import ExitCode
+from pytask import build
 from pytask_parallel.backends import ParallelBackend
 
 
diff --git a/tests/test_execute.py b/tests/test_execute.py
index 9786c67..dbdfbe0 100644
--- a/tests/test_execute.py
+++ b/tests/test_execute.py
@@ -4,9 +4,9 @@
 from time import time
 
 import pytest
+from pytask import ExitCode
 from pytask import build
 from pytask import cli
-from pytask import ExitCode
 from pytask_parallel.backends import PARALLEL_BACKENDS
 from pytask_parallel.backends import ParallelBackend
 from pytask_parallel.execute import _Sleeper
diff --git a/tests/test_jupyter/test_functional_interface.ipynb b/tests/test_jupyter/test_functional_interface.ipynb
index abbce24..3750b24 100644
--- a/tests/test_jupyter/test_functional_interface.ipynb
+++ b/tests/test_jupyter/test_functional_interface.ipynb
@@ -3,7 +3,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "12bc75b1",
+   "id": "0",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -18,7 +18,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "29ac7311",
+   "id": "1",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -39,7 +39,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "738c9418",
+   "id": "2",
    "metadata": {},
    "outputs": [],
    "source": [
diff --git a/tests/test_jupyter/test_functional_interface_w_relative_path.ipynb b/tests/test_jupyter/test_functional_interface_w_relative_path.ipynb
index 1202ccf..57303eb 100644
--- a/tests/test_jupyter/test_functional_interface_w_relative_path.ipynb
+++ b/tests/test_jupyter/test_functional_interface_w_relative_path.ipynb
@@ -3,7 +3,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "12bc75b1",
+   "id": "0",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -18,7 +18,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "29ac7311",
+   "id": "1",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -39,7 +39,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "738c9418",
+   "id": "2",
    "metadata": {},
    "outputs": [],
    "source": [