A modern project, package, and virtual env manager
Hatch is a productivity tool designed to make your workflow easier and more efficient, while also reducing the number of other tools you need to know. It aims to make the 90% use cases as pleasant as possible.
For me personally, Hatch has entirely replaced the manual (or entire!) use of these:
- Cookiecutter PyPackage
- python setup.py ...
/^\/^\ _|__| O| \/ /~ \_/ \ \____|__________/ \ \_______ \ `\ \ \ | | \ / / \ / / \ / / \ \ / / \ \ / / _----_ \ \ / / _-~ ~-_ | | ( ( _-~ _--_ ~-_ _/ | \ ~-____-~ _-~ ~-_ ~-_-~ / ~-_ _-~ ~-_ _-~ ~--______-~ ~-___-~
Table of Contents
- Completely cross-platform (terminal colors too!) \(*_^)/
- Configurable project creation, with good defaults
- Easiest virtual environment management available, with support for all shells
- Package management defaults to a per-user basis, allowing global usage with elevated privileges (for your safety)
- Configurable semantic version bumping
- Robust build/package cleanup
- Easy testing with code coverage
- Simple building and releasing for PyPI
- All commands are environment-aware w.r.t. python/pip
Starting a new project is as easy as:
$ hatch new my-app Created project `my-app`
Now you have a fully functional package that can be built and distributed.
$ tree --dirsfirst my-app my-app ├── my_app │ └── __init__.py ├── tests │ └── __init__.py ├── LICENSE-APACHE ├── LICENSE-MIT ├── MANIFEST.in ├── README.rst ├── requirements.txt ├── setup.py └── tox.ini 2 directories, 8 files
You can also bump the version of most projects without any setup:
$ git clone -q https://github.com/requests/requests && cd requests $ hatch grow build Updated /home/ofek/requests/requests/__version__.py 2.18.4 -> 2.18.4+build.1 $ hatch grow fix Updated /home/ofek/requests/requests/__version__.py 2.18.4+build.1 -> 2.18.5 $ hatch grow pre Updated /home/ofek/requests/requests/__version__.py 2.18.5 -> 2.18.5-rc.1 $ hatch grow minor Updated /home/ofek/requests/requests/__version__.py 2.18.5-rc.1 -> 2.19.0 $ hatch grow major Updated /home/ofek/requests/requests/__version__.py 2.19.0 -> 3.0.0
Checking code coverage is a breeze:
$ git clone https://github.com/ofek/privy && cd privy $ hatch test -c ========================= test session starts ========================== platform linux -- Python 3.5.2, pytest-3.2.1, py-1.4.34, pluggy-0.4.0 rootdir: /home/ofek/privy, inifile: plugins: xdist-1.20.0, mock-1.6.2, httpbin-0.0.7, forked-0.2, cov-2.5.1 collected 10 items tests/test_privy.py .......... ====================== 10 passed in 4.34 seconds ======================= Tests completed, checking coverage... Name Stmts Miss Branch BrPart Cover Missing ----------------------------------------------------------------- privy/__init__.py 1 0 0 0 100% privy/core.py 30 0 0 0 100% privy/utils.py 13 0 4 0 100% tests/__init__.py 0 0 0 0 100% tests/test_privy.py 57 0 0 0 100% ----------------------------------------------------------------- TOTAL 101 0 4 0 100%
Creating virtual envs is incredibly simple:
$ hatch env my-app Already using interpreter /usr/bin/python3 Successfully saved virtual env `my-app` to `/home/ofek/.virtualenvs/my-app`. $ hatch env -ll Virtual environments found in /home/ofek/.virtualenvs: my-app -> Version: 3.5.2 Implementation: CPython
and using them is just as fluid:
$ which python /usr/bin/python $ hatch shell my-app (my-app) $ which python /home/ofek/.virtualenvs/my-app/bin/python
Keep reading for so much more!
Hatch is distributed on PyPI as a universal wheel and is available on Linux/macOS and Windows and supports Python 3.5+ and PyPy.
$ pip3 install --user hatch
or simply pip if that already points to a Python 3 version.
After the first installation, you may want to run hatch config --restore to ensure your config file is available.
- start using AppVeyor
- next to the snake ascii art, put a hatched egg (blocks 1.0.0)
- project creation
Hatch is distributed under the terms of both
at your option.
- All the people who work on Click
- All the people involved in the Python packaging ecosystem
- All the people involved in the pytest ecosystem
- Ned Batchelder, for his Coverage.py is the unsung heroic tool of the Python community. Without it, users would be exposed to more bugs before we are.
- Te-jé Rodgers for bestowing me the name hatch on PyPI
Important changes are emphasized.
- use renamed to shell, though it will remain as an alias!
- new/init commands now only emit a warning when there is no config file.
- You can now specify what Python to use when creating a virtual env in the new/init command.
- Fix: use no longer requires the env name argument to be . when targeting a project’s dedicated virtual env.
- new/init commands now create a dedicated virtual env for the project. This can be disabled with the new -ne/--no-env flag.
- install, uninstall, update, and use commands are now able to detect and use a project’s dedicated virtual env!
- Removed: redundant optional argument for new/init commands.
- Support for recent versions of the fish shell!
- Added --admin flag to install, uninstall, and update commands to indicate elevated privileges have already been given.
- Basic support for csh/tcsh shells.
- You can now specify what Python to use when creating a temporary virtual env in the use command.
- Added a -l/--local shortcut flag to the commands grow, test, clean, build, and release. This allows you to omit the name of a local package if it is the only one.
- More informative output, including a new color!
- Package review for Fedora begins! (now approved)
- clean now also removes optimized bytecode files (*.pyo).
- test is now environment-aware by default.
- Faster virtual environment creation!
- Full xonsh support :)
- More informative output and coloring!
View all history
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|File Name & Checksum SHA256 Checksum Help||Version||File Type||Upload Date|
|hatch-0.15.0-py3-none-any.whl (103.1 kB) Copy SHA256 Checksum SHA256||py3||Wheel||Sep 20, 2017|
|hatch-0.15.0.tar.gz (66.0 kB) Copy SHA256 Checksum SHA256||–||Source||Sep 20, 2017|