Metadata-Version: 2.1
Name: hatch-pip-deepfreeze
Version: 0.2
Summary: Lock hatch environments using pip-deepfreeze
Project-URL: Documentation, https://github.com/sbidoul/hatch-pip-deepfreeze#readme
Project-URL: Issues, https://github.com/sbidoul/hatch-pip-deepfreeze/issues
Project-URL: Source, https://github.com/sbidoul/hatch-pip-deepfreeze
Author-email: Stéphane Bidoul <stephane.bidoul@acsone.eu>
License-File: LICENSE.txt
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Hatch
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.7
Requires-Dist: hatch
Requires-Dist: pip-deepfreeze
Description-Content-Type: text/markdown

# hatch-pip-deepfreeze

[![PyPI - Version](https://img.shields.io/pypi/v/hatch-pip-deepfreeze.svg)](https://pypi.org/project/hatch-pip-deepfreeze)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/hatch-pip-deepfreeze.svg)](https://pypi.org/project/hatch-pip-deepfreeze)

-----

A [hatch](https://pypi.org/project/hatch/) virtual
[environment](https://hatch.pypa.io/latest/config/environment/overview/) plugin to lock
dependencies with [pip-deepfreeze](https://pypi.org/project/pip-deepfreeze/).

## Installation

`hatch-pip-deepfreeze` must be installed in the same environment as `hatch` itself. 

If `hatch` has been installed with `pipx`:

```console
pipx runpip hatch install hatch-pip-deepfreeze
```

If `hatch` has been installed with `pip` in the user environment:

```console
pip install --user hatch-pip-deepfreeze
```

## Usage

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:

```toml
[project.optional-dependencies]
test = [
    "pytest",
    "pytest-cov",
]
```

Update the default environment section to remove `dependencies` and add `features`:

```toml
[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.

## License

`hatch-pip-deepfreeze` is distributed under the terms of the
[MIT](https://spdx.org/licenses/MIT.html) license.
