Slap is a command-line utility for developing Python applications.
Project description
Slap
Slap is a command-line tool to simplify command 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:
Documentation
You can find the documentation for Slap here: https://niklasrosenstein.github.io/slap/
Check out the Getting started guide.
Feature Matrix
Feature | Poetry | Documentation |
---|---|---|
Manage structured changelog entries | ❌ | slap changelog |
Show project details | ❌ | slap info |
Build and publish to PyPI using Twine | ✅ (single project only) | slap publish |
Create a new release (bump version numbersr) | ❌ (sub-par support) | slap release |
Run a command configured in pyproject.toml |
❌ | slap run |
Run tests configured in pyproject.toml |
❌ | slap test |
Manage Python virtualenv's | ✅ (but out-of-worktree) | slap venv |
Generate a dependencies report | ❌ | slap report dependencies |
Feature / Build backend | Flit | Poetry | Setuptools | Documentation |
---|---|---|---|---|
Add dependency | ✅ | ✅ | ❌ | slap add |
Sanity check project configuration | ✅ | slap check | ||
Bootstrap project files | ✅ | slap init | ||
Install projects using Pip | ✅ | ✅ | ✅ | slap install |
Symlink projects (editable installs) | ✅ | ✅ 1 | ✅ | slap link |
Bump interdependencies in mono-repository | ✅ (not tested regularly) | ✅ | ✅ (partial) | slap release |
Legend: ✅ explicitly supported, ❌ explicitly not supported, (blank) not relevant or currently not supported
1 Poetry supports the configuration of multiple packages per project, but Slap currently does not support linking more than one package. This does not impact the ability to symlink all projects in a mono-repository, which functions as expected.
Issues / Suggestions / Contributions
Slap 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 yourpyproject.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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file slap-cli-1.6.2.tar.gz
.
File metadata
- Download URL: slap-cli-1.6.2.tar.gz
- Upload date:
- Size: 79.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.64.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b0c387cf85fa3df326673f00db54a7624fb8a46bdf1a7c3100cdf87450ec6b44 |
|
MD5 | a2bf9ffee1c3e13465f20ccfc2949de6 |
|
BLAKE2b-256 | 26b55c311b602d05801d201e3c38fdbe6933c1b7718da24f0c246d90c548843e |
File details
Details for the file slap_cli-1.6.2-py3-none-any.whl
.
File metadata
- Download URL: slap_cli-1.6.2-py3-none-any.whl
- Upload date:
- Size: 99.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.64.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd77e0f1ce393ab86f9926d725dd5888350a098d2720fcb5f1d24815c7a60aa0 |
|
MD5 | db1f798dab5d6a608492294af27c2c0f |
|
BLAKE2b-256 | 836f0e2975c659d6a0514f1b7ba8db04a1bcfabf893e35c3c0e3fbc76c3e251d |