Skip to content

Supported dependency managers

While most dependency managers support the standard PEP 621 format for defining dependencies in pyproject.toml, not all of them do. Even those that do often provide additional ways to define dependencies that are not standardized.

deptry can extract dependencies from most of the package managers that support PEP 621 (e.g. uv, PDM), including tool-specific extensions, but also from package managers that do not (or used to not) support PEP 621 (e.g. Poetry, pip).

PEP 621

deptry fully supports PEP 621 standard, and uses the presence of a [project] section in pyproject.toml to determine that the project uses PEP 621.

By default, deptry extracts, from pyproject.toml:

  • regular dependencies from:
    • dependencies entry under [project] section
    • groups under [project.optional-dependencies] section
  • development dependencies from groups under [dependency-groups] section

For instance, with this pyproject.toml:

pyproject.toml
[project]
name = "foo"
dependencies = ["orjson>=3.0.0"]

[project.optional-dependencies]
cli = ["click>=8.0.0"]
http = [
    "httpx>=0.27.0",
    "uvicorn>=0.32.0",
]

[dependency-groups]
docs = ["mkdocs==1.6.1"]
test = [
    "pytest==8.3.3",
    "pytest-cov==5.0.0",
]

the following dependencies will be extracted:

  • regular dependencies: orjson, click, httpx, uvicorn
  • development dependencies: mkdocs, pytest, pytest-cov

Note

Groups under [project.optional-dependencies] can be flagged as development dependency groups by using --pep621-dev-dependency-groups argument (or its pep_621_dev_dependency_groups equivalent in pyproject.toml).

uv

Additionally to PEP 621 dependencies, deptry will extract uv development dependencies from dev-dependencies entry under [tool.uv] section, for instance:

pyproject.toml
[tool.uv]
dev-dependencies = [
    "mkdocs==1.6.1",
    "pytest==8.3.3",
    "pytest-cov==5.0.0",
]

PDM

Additionally to PEP 621 dependencies, deptry will extract PDM development dependencies from [tool.pdm.dev-dependencies] section, for instance:

pyproject.toml
[tool.pdm.dev-dependencies]
docs = ["mkdocs==1.6.1"]
test = [
    "pytest==8.3.3",
    "pytest-cov==5.0.0",
]

Setuptools

When using setuptools as a build backend, both dependencies and optional-dependencies can be dynamically read from requirements.txt-format files, for instance:

pyproject.toml
[build-backend]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[project]
name = "foo"
dynamic = ["dependencies", "optional-dependencies"]

[tool.setuptools.dynamic]
dependencies = { file = ["requirements.txt"] }

[tool.setuptools.dynamic.optional-dependencies]
cli = { file = ["cli-requirements.txt"] }

In this example, regular dependencies will be extracted from both requirements.txt and cli-requirements.txt files.

Note

Groups under [tool.setuptools.dynamic.optional-dependencies] can be flagged as development dependency groups by using --pep621-dev-dependency-groups argument (or its pep_621_dev_dependency_groups equivalent in pyproject.toml).

Poetry

deptry supports extracting dependencies defined using Poetry, and uses the presence of a [tool.poetry.dependencies] section in pyproject.toml to determine that the project uses Poetry.

In a pyproject.toml file where Poetry is used, deptry will extract:

  • regular dependencies from entries under [tool.poetry.dependencies] section
  • development dependencies from entries under each [tool.poetry.group.<group>.dependencies] section (or the legacy [tool.poetry.dev-dependencies] section)

For instance, given the following pyproject.toml file:

pyproject.toml
[tool.poetry.dependencies]
python = "^3.10"
orjson = "^3.0.0"
click = { version = "^8.0.0", optional = true }

[tool.poetry.extras]
cli = ["click"]

[tool.poetry.group.docs.dependencies]
mkdocs = "1.6.1"

[tool.poetry.group.test.dependencies]
pytest = "8.3.3"
pytest-cov = "5.0.0"

the following dependencies will be extracted:

  • regular dependencies: orjson, click
  • development dependencies: mkdocs, pytest, pytest-cov

requirements.txt (pip, pip-tools)

deptry supports extracting dependencies using requirements.txt format, which is mostly used by pip and pip-tools.

By default, deptry will look for:

  • regular dependencies in requirements.txt (or requirements.in if existing, assuming pip-tools is used)
  • development dependencies in dev-requirements.txt and requirements-dev.txt

For instance, given the following requirements.txt file:

requirements.txt
click>=8.0.0
orjson>=3.0.0

and the following dev-requirements.txt file:

dev-requirements.txt
mkdocs==1.6.1
pytest==8.3.3
pytest-cov==5.0.0

the following dependencies will be extracted:

  • regular dependencies: click, orjson
  • development dependencies: mkdocs, pytest, pytest-cov

If a requirements file references other requirements files, for instance with -r other-requirements.txt, deptry will also include the dependencies from the referenced files.

Note

If using different files for regular dependencies, --requirements-files (or its requirements_files equivalent in pyproject.toml) can be used to instruct deptry about the requirements files locations. Similarly, --requirements-files-dev (or its requirements_files_dev equivalent in pyproject.toml) can be used for requirements files containing development dependencies.