DP007: OptionalDepsWork
Overview
| Property | Value |
|---|---|
| ID | DP007 |
| Name | OptionalDepsWork |
| Group | dependencies |
| Severity | WARNING |
Description
Checks that optional dependencies are valid and can be resolved.
Invalid optional dependencies can cause:
- Installation failures when users request extras
- Confusing error messages during pip install
- Broken functionality for optional features
What it checks
The check validates optional-dependencies in pyproject.toml:
# BAD - invalid package specifiers
[project.optional-dependencies]
dev = [
"pytest>=", # Invalid: incomplete version spec
"invalid name", # Invalid: spaces in package name
">=1.0", # Invalid: missing package name
]
# GOOD - valid package specifiers
[project.optional-dependencies]
dev = [
"pytest>=7.0.0",
"mypy>=1.0.0",
"ruff>=0.1.0",
]
test = [
"pytest-cov>=4.0.0",
"coverage[toml]>=7.0",
]How to fix
Ensure all optional dependencies are valid package specifiers:
Example fix
[project.optional-dependencies]
dev = [
"pytest>=7.0.0",
"mypy>=1.0.0",
"ruff>=0.1.0",
]
docs = [
"sphinx>=6.0.0",
"sphinx-rtd-theme>=1.0.0",
]Verify installation works
# Test that extras can be installed
pip install -e ".[dev]"
pip install -e ".[docs]"
pip install -e ".[dev,docs]"Common mistakes
- Missing package name before version specifier
- Invalid characters in package names
- Typos in package names (check won’t catch these)
- Incomplete version specifiers like
>=without version
Configuration
Skip this check
[tool.pycmdcheck]
skip = ["DP007"]CLI
pycmdcheck --skip DP007