mirror of https://github.com/pypa/hatch.git
704cdcd1a0 | ||
---|---|---|
.github | ||
hatch | ||
tests | ||
.appveyor.yml | ||
.codecov.yml | ||
.coveragerc | ||
.gitattributes | ||
.gitignore | ||
.travis.yml | ||
AUTHORS.rst | ||
COMMANDS.rst | ||
CONFIG.rst | ||
HISTORY.rst | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
MANIFEST.in | ||
README.rst | ||
setup.py | ||
tox.ini |
README.rst
Hatch ===== .. image:: https://img.shields.io/pypi/v/hatch.svg?style=flat-square :target: https://pypi.org/project/hatch :alt: Latest PyPI version .. image:: https://img.shields.io/travis/ofek/hatch/master.svg?style=flat-square :target: https://travis-ci.org/ofek/hatch :alt: Travis CI .. image:: https://img.shields.io/appveyor/ci/ofek/hatch/master.svg?style=flat-square :target: https://ci.appveyor.com/project/ofek/hatch :alt: AppVeyor CI .. image:: https://img.shields.io/codecov/c/github/ofek/hatch/master.svg?style=flat-square :target: https://codecov.io/gh/ofek/hatch :alt: Codecov .. image:: https://img.shields.io/pypi/pyversions/hatch.svg?style=flat-square :target: https://pypi.org/project/hatch :alt: Supported Python versions .. image:: https://img.shields.io/pypi/l/hatch.svg?style=flat-square :target: https://choosealicense.com/licenses :alt: License ----- 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 <https://github.com/audreyr/cookiecutter-pypackage>`_ - `pip <https://github.com/pypa/pip>`_ - `virtualenv <https://github.com/pypa/virtualenv>`_ - `pyenv <https://github.com/pyenv/pyenv>`_ - `Pew <https://github.com/berdario/pew>`_ - `inve <https://gist.github.com/datagrok/2199506>`_ - `pytest`_ - `Coverage.py <https://github.com/nedbat/coveragepy>`_ - `twine <https://github.com/pypa/twine>`_ - `bumpversion <https://github.com/peritus/bumpversion>`_ - `zest.releaser <https://github.com/zestsoftware/zest.releaser>`_ - `Incremental <https://github.com/twisted/incremental>`_ - ``python setup.py ...`` .. code-block:: /^\/^\ _|__| O| \/ /~ \_/ \ \____|__________/ \ \_______ \ `\ \ \ | | \ / / \ / / \ / / \ \ / / \ \ / / _----_ \ \ / / _-~ ~-_ | | ( ( _-~ _--_ ~-_ _/ | \ ~-____-~ _-~ ~-_ ~-_-~ / ~-_ _-~ ~-_ _-~ ~--______-~ ~-___-~ .. contents:: **Table of Contents** :backlinks: none Features -------- - 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 <https://news.ycombinator.com/item?id=15256121>`_) - 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 Usage ----- Starting a new project is as easy as: .. code-block:: bash $ hatch new my-app Created project `my-app` Now you have a fully functional package that can be built and distributed. .. code-block:: bash $ 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: .. code-block:: bash $ 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: .. code-block:: bash $ 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: .. code-block:: bash $ 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: .. code-block:: bash $ 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! Installation ------------ Hatch is distributed on `PyPI`_ as a universal wheel and is available on Linux/macOS and Windows and supports Python 3.5+ and PyPy. .. code-block:: bash $ pip3 install --user hatch or simply ``pip`` if that already points to a Python 3 version. If ``hatch`` doesn't work on your system immediately after that, please run `this command <https://github.com/ofek/pybin#installation>`_ then `that command <https://github.com/ofek/pybin#pybin-put>`_. After the first installation, you may want to run ``hatch config --restore`` to ensure your config file is available. Guide ----- - `Command reference <https://github.com/ofek/hatch/blob/master/COMMANDS.rst>`_ - `Configuration <https://github.com/ofek/hatch/blob/master/CONFIG.rst>`_ Contributing ------------ TODO ^^^^ *meta* - next to the snake ascii art, put a ``hatch``\ ed egg (blocks ``1.0.0``) *project creation* - Support `AppVeyor <https://www.appveyor.com/>`_ and `CircleCI <https://circleci.com/>`_. - Minimally support `Mercurial <https://en.wikipedia.org/wiki/Mercurial>`_ *Commands* - ``bench`` - use `<https://github.com/ionelmc/pytest-benchmark>`_ (blocks ``1.0.0``) - ``python`` - installs the desired version of Python. will work on each platform - ``style`` - maybe not needed. use `<https://github.com/PyCQA/flake8>`_ - ``docs`` - maybe not needed. use `<https://github.com/sphinx-doc/sphinx/>`_ License ------- Hatch is distributed under the terms of both - `Apache License, Version 2.0 <https://choosealicense.com/licenses/apache-2.0>`_ - `MIT License <https://choosealicense.com/licenses/mit>`_ at your option. Credits ------- - All the people who work on `Click <https://github.com/pallets/click>`_ - All the people involved in the `Python packaging <https://github.com/pypa>`_ ecosystem - All the people involved in the `pytest`_ ecosystem - `Ned Batchelder <https://twitter.com/nedbat>`_, for his `Coverage.py <https://github.com/nedbat/coveragepy>`_ is the unsung heroic tool of the Python community. Without it, users would be exposed to more bugs before we are. - `Te-jé Rodgers <https://github.com/mr-rodgers>`_ for bestowing me the name ``hatch`` on `PyPI`_ History ------- Important changes are emphasized. master ^^^^^^ 0.23.0 ^^^^^^ - Fixed wheel packaging 0.22.0 ^^^^^^ - Upgrade ``userpath`` dependency - Fixed shipped test suite 0.21.0 ^^^^^^ - ``adduserpath`` dependency has claimed/been renamed ``userpath`` - Fixed various build errors - Don't require internet for tests 0.20.0 ^^^^^^ - `Conda <https://conda.io/docs/glossary.html#miniconda-glossary>`_ can now be installed on every platform with a simple ``hatch conda`` \\[^,^]/ - ``new``/``init`` commands now enter an interactive mode if no project name is specified! 0.19.0 ^^^^^^ - ``test``\ ing now supports the use of a project's dedicated virtual env and any dev requirements can be installed in it automatically! 0.18.0 ^^^^^^ - ``release`` now allows the use of custom repositories! - **Fix:** ``clean``\ ing now correctly ignores a project's dedicated virtual env. This behavior can be disabled with the new ``-nd/--no-detect`` flag. 0.17.1 ^^^^^^ - Handle `<https://bugs.python.org/issue22490>`_ 0.17.0 ^^^^^^ - Hatch now guarantees Windows support via AppVeyor! - No project detection will occur if a virtual env is active. 0.16.0 ^^^^^^ - Virtual envs created with ``env``, ``new``, ``init``, and ``shell`` commands can now access the system site-packages with the ``-g/--global-packages`` flag! - Improved ``setup.py`` generation. 0.15.0 ^^^^^^ - ``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. View `all history <https://github.com/ofek/hatch/blob/master/HISTORY.rst>`_ .. _pytest: https://github.com/pytest-dev .. _PyPI: https://pypi.org