diff --git a/src/_pytest/main.py b/src/_pytest/main.py index 73648557e..f28bc68db 100644 --- a/src/_pytest/main.py +++ b/src/_pytest/main.py @@ -631,7 +631,10 @@ class Session(nodes.FSCollector): """Convert a dotted module name to path.""" try: spec = importlib.util.find_spec(x) - except (ValueError, ImportError): + # AttributeError: looks like package module, but actually filename + # ImportError: module does not exist + # ValueError: not a module name + except (AttributeError, ImportError, ValueError): return x if spec is None or spec.origin in {None, "namespace"}: return x diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index dbdf048a4..d2a348f40 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -646,6 +646,12 @@ class TestInvocationVariants: # should only configure once assert result.outlines.count("configuring") == 1 + def test_pyargs_filename_looks_like_module(self, testdir): + testdir.tmpdir.join("conftest.py").ensure() + testdir.tmpdir.join("t.py").write("def test(): pass") + result = testdir.runpytest("--pyargs", "t.py") + assert result.ret == ExitCode.OK + def test_cmdline_python_package(self, testdir, monkeypatch): import warnings