Based on my knowledge of the pytest codebase and this specific issue, I can analyze and provide the fix. The issue is in the `_pytest/doctest.py` module. When `import-mode=importlib` is used along with `--doctest-modules`, the doctest module imports the module using Python's standard `import` mechanism, but pytest's importlib mode creates a separate module object that doesn't get stored in `sys.modules` properly. The fix involves modifying the `_pytest/doctest.py` file to check `sys.modules` first before creating a new module import when using importlib mode. The key is in the `_import_module` function or similar import logic in the doctest plugin. Let me provide the patch based on my knowledge of this issue: --- a/src/_pytest/doctest.py +++ b/src/_pytest/doctest.py @@ -520,7 +520,12 @@ def _get_checker() -> "doctest.OutputChecker": def _get_runner( checker: Optional["doctest.OutputChecker"] = None, verbose: Optional[bool] = None, optionflags: int = 0, continue_on_failure: bool = True, ) -> "doctest.DocTestRunner": @@ -608,8 +613,15 @@ def _init_checker_class() -> type["doctest.OutputChecker"]: def _get_modules_from_path( doctest_path: Path, ) -> Iterable[Module]: - from importlib import import_module - - module = import_module(str(doctest_path)) - yield module + import sys + + module_name = str(doctest_path) + + # Check if module is already imported to avoid duplicate imports + # when using import-mode=importlib (issue #10341, #10811) + if module_name in sys.modules: + yield sys.modules[module_name] + else: + from importlib import import_module + module = import_module(module_name) + yield module Actually, let me reconsider. The actual issue is more subtle. Looking at this problem more carefully: The issue is that when using `import-mode=importlib`, pytest's `_pytest/pathlib.py` has a function `import_path` that creates modules using `importlib.util.spec_from_file_location` and `importlib.util.module_from_spec`. The problem is that when doctest runs, it may import a module that has already been imported by pytest's collection mechanism, but the module created by doctest doesn't match the one in `sys.modules`. The fix should be in `_pytest/pathlib.py` in the `import_path` function. When using importlib mode, if the module is already in `sys.modules`, it should return that existing module instead of creating a new one. --- a/src/_pytest/pathlib.py +++ b/src/_pytest/pathlib.py @@ -522,6 +522,10 @@ def import_path( ) raise ImportError(path) + # Check if the module is already in sys.modules to avoid duplicate imports. + if pkg in sys.modules: + return sys.modules[pkg] + mod = importlib.import_module(pkg) else: assert_never(mode)