Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sbidoul/hatch-pip-deepfreeze

A hatch virtual environment plugin to lock dependencies with pip-deepfreeze
https://github.com/sbidoul/hatch-pip-deepfreeze

Last synced: 23 days ago
JSON representation

A hatch virtual environment plugin to lock dependencies with pip-deepfreeze

Awesome Lists containing this project

README

        

# 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.