---
tags: python, packaging, zsh
---

# Python packaging with Hatch, pipx and Zsh environment variables


It's been a while I didn't packaged something new. I recently remembered an old
package of mine that needed some attention :
[debts](https://gitlab.com/almet/debts). It's now time to package it, so I
discovered [hatch](https://hatch.pypa.io/)

  hatch new --init

This does the heavy-lifting for you, actually porting the `setup.py` files to the
new way of packaging with python (with a `pyproject.toml` file)

Then `hatch shell` will create a development environment, install dependencies,
check the `pyproject.toml` file in one command, and give you a shell to test
whatever you need to test.

## Isolating system packages

I discovered that [pipx](https://github.com/pypa/pipx) is a convenient way to
install user-facing applications on my system. I use multiple virtual
environments for my different projects, but not for the install that are used
system-wide.

pipx seems to solve this, and avoid using `sudo pip install x`.

## Manipulating env variables with Zsh

I use [Zsh](https://www.zsh.org/) as my main shell for years, and I just
discovered that it's possible to manipulate environment variables in an easy way.

If you're like me, you never remember how to add something to your path. You
can actually use `+=`, like this:

```zsh
path+=('/Users/alexis/.local/bin')
export PATH
```
