A hatch virtual environment plugin to lock dependencies with pip-deepfreeze.
hatch-pip-deepfreeze
must be installed in the same environment as hatch
itself.
If hatch
has been installed with pipx
:
pipx runpip hatch install hatch-pip-deepfreeze
If hatch
has been installed with pip
in the user environment:
pip install --user hatch-pip-deepfreeze
In the tool.hatch.envs.{name}
section, add type = "pip-deepfreeze"
.
Such environments behave similarly to the standard hatch virtual
environments,
except the installation and synchronization is performed using pip-deepfreeze sync
.
This will automatically generate locked dependencies in requirements.txt
, and
uninstall unneeded dependencies after removing them from pyproject.toml
.
It also pins optional dependencies groups in requirements-{extra}.txt
.
You can use the features
to install project.optional-dependencies
in environments.
Note that this pluging does not support per environment dependencies
, because
pip-deepfreeze
works exclusively with project.optional-dependencies
for that.
Fortunately this is well supported by hatch
.
As an example, you can adapt a pyproject.toml
generated by hatch new
like so:
Declare optional dependencies for test:
[project.optional-dependencies]
test = [
"pytest",
"pytest-cov",
]
Update the default environment section to remove dependencies
and add features
:
[tool.hatch.envs.default]
type = "pip-deepfreeze"
features = ["test"]
Use the usual hatch
environment activation features such as hatch shell
and notice
pip-deepfreeze
in action.
hatch-pip-deepfreeze
is distributed under the terms of the
MIT license.