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
:
[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:
[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:
[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:
[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:
[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
(orrequirements.in
if existing, assuming pip-tools is used) - development dependencies in
dev-requirements.txt
andrequirements-dev.txt
For instance, given the following requirements.txt
file:
click>=8.0.0
orjson>=3.0.0
and the following dev-requirements.txt
file:
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.