https://github.com/niklasrosenstein/slap
Slap is a CLI to assist in the process for developing and releasing Python packages.
https://github.com/niklasrosenstein/slap
app cli flit python python-poetry release-automation setuptools
Last synced: about 2 months ago
JSON representation
Slap is a CLI to assist in the process for developing and releasing Python packages.
- Host: GitHub
- URL: https://github.com/niklasrosenstein/slap
- Owner: NiklasRosenstein
- License: other
- Created: 2020-08-14T11:04:56.000Z (almost 5 years ago)
- Default Branch: develop
- Last Pushed: 2025-04-03T16:21:00.000Z (2 months ago)
- Last Synced: 2025-04-06T13:11:52.423Z (about 2 months ago)
- Topics: app, cli, flit, python, python-poetry, release-automation, setuptools
- Language: Python
- Homepage: https://niklasrosenstein.github.io/slap/
- Size: 11 MB
- Stars: 22
- Watchers: 2
- Forks: 12
- Open Issues: 45
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Slap
[PEP 517]: https://peps.python.org/pep-0517/
Slap is a command-line tool to simplify common workflows in the development of Python projects
independent of the [PEP 517][] build backend being used, capable of managing single- and multi-project
repositories.## Installation
I recommend installing Slap using Pipx. (Requires Python 3.10 or higher)
$ pipx install slap-cli
> __Note__: Currently Slap relies on an alpha version of `poetry-core` (`^1.1.0a6`). If you install it into
> the same environment as Poetry itself, you may also need to use an alpha version of Poetry (e.g. `1.2.0a2`).
>
> If you use Slap in GitHub Actions, try one of the actions provided by Slap directly:
>
> * [`NiklasRosenstein/slap@gha/install/v1`](https://niklasrosenstein.github.io/slap/guides/github/#install-slap)
> * [`NiklasRosenstein/slap@gha/changelog/update/v1`](https://niklasrosenstein.github.io/slap/guides/github/#update-changelogs)## Documentation
You can find the documentation for Slap here:
Check out the [Getting started](https://niklasrosenstein.github.io/slap/getting-started/) guide.
## Feature Matrix
[uv]: https://github.com/astral-sh/uv
| Feature | Poetry | Documentation |
| ------- | ------ | ------------- |
| Manage structured changelog entries | ❌ | [slap changelog](https://niklasrosenstein.github.io/slap/commands/changelog/) |
| Show project details | ❌ | [slap info](https://niklasrosenstein.github.io/slap/commands/info/) |
| Build and publish to PyPI using Twine | ✅ (single project only) | [slap publish](https://niklasrosenstein.github.io/slap/commands/publish/) |
| Create a new release (bump version numbersr)| ❌ (sub-par support) | [slap release](https://niklasrosenstein.github.io/slap/commands/release/) |
| Run a command configured in `pyproject.toml` | ❌ | [slap run](https://niklasrosenstein.github.io/slap/commands/run/) |
| Run tests configured in `pyproject.toml` | ❌ | [slap test](https://niklasrosenstein.github.io/slap/commands/test/) |
| Manage Python virtualenv's | ✅ (but out-of-worktree) | [slap venv](https://niklasrosenstein.github.io/slap/commands/venv/) |
| Generate a dependencies report | ❌ | [slap report dependencies](https://niklasrosenstein.github.io/slap/commands/report/) |
| Project dependencies lock file | ✅ | ❌ || Feature / Build backend | Flit | Poetry | Setuptools | Documentation |
| ----------------------- | ----- | ------- | ----------- | --------- |
| Add dependency | ✅ | ✅ | ❌ | [slap add](https://niklasrosenstein.github.io/slap/commands/add/) |
| Sanity check project configuration | | ✅ | | [slap check](https://niklasrosenstein.github.io/slap/commands/check/) |
| Bootstrap project files | | ✅ | | [slap init](https://niklasrosenstein.github.io/slap/commands/init/) |
| Install projects using Pip or [uv] | ✅ | ✅ | ✅ | [slap install](https://niklasrosenstein.github.io/slap/commands/install/) |
| Symlink projects (editable installs) | ✅ | ✅ | ✅ | [slap link](https://niklasrosenstein.github.io/slap/commands/link/) |
| Bump interdependencies in mono-repository | ✅ (not tested regularly) | ✅ | ✅ (partial) | [slap release](https://niklasrosenstein.github.io/slap/commands/release/) |> __Legend__: ✅ explicitly supported, ❌ explicitly not supported, (blank) not relevant or currently not supported
## Issues / Suggestions / Contributions
[GitHub Issues]: https://github.com/NiklasRosenstein/slap/issues
[GitHub Discussions]: https://github.com/NiklasRosenstein/slap/discussions
[GitHub Repository]: https://github.com/NiklasRosenstein/slapSlap is currently very opinionated by the fact that I built it as my personal workflow tool, but I welcome
suggestions and contributions, and I am hopeful it will be useful to a wider audience than myself.Please report any issues you encounter via [GitHub Issues][]. Feel free to use the [GitHub Discussions][] forum
to ask questions or make suggestions on new features (e.g. if you would like a new build backend to be supported?).
Lastly, feel free to submit pull requests to the [GitHub Repository][].## FAQ
### Why "Slap"?
Finding a good, catchy name that also types easily in the terminal and is not already widely used isn't easy, ok?
### What makes this different to the Poetry CLI?
Some people might find this similar to tools like Poetry, and while there is some overlap in functionality, Slap is
**not a build backend** and is more targeted towards library development. In fact, most of my projects use Poetry as
the build backend but I never even once interact with the Poetry CLI throughout the lifetime of the project.The most notable differences to Poetry are
* Supports mono-repositories (i.e. multiple related Python projects in the same repository), to the extent that it
bumps version numbers of project inter-dependencies and installs your projects in topological order
* Supports development installs independent of the build backend (yes; this means you can install Poetry packages
in editable mode even though the Poetry backend right now does not support editable installs)
* Slap's version bump command (`slap release`) updates the version not just in your `pyproject.toml` but also the
`__version__` in your source code as well as in related projects (see mono-repositories above) and any additional
references you can configure via Regex patterns
* Does not automagically create a virtual environment for you when instal your project(s); instead, it errors when
you try to install into a non-virtual Python environment and gives you an easy-to-use tool to create and activate
virtual environments (and allowing multiple environments per project as well as global environments)
* Uses Pip to install your project(s), unlike Poetry which comes with its own dependency resolver and package
installer (which I personally have been having a lot of issues with in the past).
* Does not have a concept of lock files### How can I use the shiny new `uv` installer with Slap?
You can configure Slap to use `uv` to create virtual environments:
$ slap config --venv-type uv
When Slap detects a virtual environment that was created with `uv` (note: actually, create with `uv` by Slap itself),
it will use `uv` to install packages into the virtual environment. Alternatively, you can pass the `--installer uv`
option to `slap install`.