ruff/crates/ty_python_semantic/resources/mdtest/import/namespace.md
Micha Reiser 3d55a16c91
Some checks are pending
CI / cargo fmt (push) Waiting to run
CI / Determine changes (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / Fuzz for new ty panics (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / check playground (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
[ty Playground] Release / publish (push) Waiting to run
[ty] Migrate the namespace package module resolver tests to mdtests (#18133)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
2025-05-16 19:56:33 +02:00

1.4 KiB

Namespace package

Basic namespace package

[environment]
python = "/.venv"

parent/child/one.py:

one = 1

/.venv/<path-to-site-packages>/parent/child/two.py:

two = 2

main.py:

import parent.child.one
import parent.child.two

from.py

# TODO: This should not be an error
from parent.child import one, two  # error: [unresolved-import]

Regular package in namespace package

[environment]
python = "/.venv"

An adapted test case from the PEP420 examples. The src/parent/child package is a regular package. Therefore, site_packages/parent/child/two.py should not be resolved.

src
  parent
    child
      __init__.py
      one.py
.venv/site-packages
  parent
    child
      two.py

parent/child/__init__.py:

parent/child/one.py:

one = 1

/.venv/<path-to-site-packages>/parent/child/two.py:

two = 2

main.py:

import parent.child.one

import parent.child.two  # error: [unresolved-import]

Priority between file and identically named namespace package

If there's a namespace package with the same name as a module, the module takes precedence.

foo.py:

x = "module"

foo/bar.py:

x = "namespace"
from foo import x

reveal_type(x)  # revealed: Unknown | Literal["module"]

import foo.bar  # error: [unresolved-import]