Welcome to Shut
Shut is an opinionated tool to simplify publishing pure Python packages.
What can Shut do for you?
- Generate setup files (
setup.py,MANIFEST.in,LICENSE.txt) - Sanity check your package configuration
- Build and publish source/wheel distributions
- Execute unit tests and static type checks
- and more
Installation
Shut requires Python 3.7+ and can be installed from PyPI:
$ pip install shut
Quickstart
Initialize a new Python package:
$ shut pkg new --name my.package .
write .gitignore
write README.md
write package.yml
write src/my/package/__init__.py
write src/my/__init__.py
Generate setuptools files:
$ shut pkg update
write setup.py
write MANIFEST.in
Create a changelog entry and commit:
$ shut changelog --add feature --for cli -cm 'Added some useful options.'
Sanity-check the package configuration:
shut pkg checks
✔️ classifiers
⚠️ license: not specified
✔️ namespace files
✔️ package-author
⚠️ package-url: missing
✔️ package-version
✔️ readme
✔️ up to date
ran 8 checks for package my.package in 0.003s
Commit the current status:
$ git add . && git commit -m 'bootstrapped package'
Release a new version:
$ shut pkg bump --tag --push
figuring bump mode from changelog
1 feature → minor
bumping 3 version reference(s)
package.yml: 0.0.0 → 0.1.0
setup.py: 0.0.0 → 0.1.0
src/my/package/__init__.py: 0.0.0 → 0.1.0
release staged changelog
.changelog/_unreleased.yml → .changelog/0.1.0.yml
updating files
write setup.py
write MANIFEST.in
tagging 0.1.0
[master ec1e9b3] (my.package) bump version to 0.1.0
4 files changed, 4 insertions(+), 4 deletions(-)
rename .changelog/{_unreleased.yml => 0.1.0.yml} (78%)
Enumerating objects: 24, done.
Counting objects: 100% (24/24), done.
Delta compression using up to 8 threads
Compressing objects: 100% (17/17), done.
Writing objects: 100% (24/24), 3.87 KiB | 566.00 KiB/s, done.
Total 24 (delta 4), reused 0 (delta 0)
To https://github.com/me/my-package
* [new branch] master -> master
* [new tag] 0.1.0 -> 0.1.0
Publish the release to PyPI:
$ shut pkg publish warehouse:pypi
building setuptools:sdist
:: build/my.package-0.1.0.tar.gz
building setuptools:wheel
:: build/my.package-0.1.0-py3-none-any.whl
publishing warehouse:pypi
:: build/my.package-0.1.0.tar.gz
:: build/my.package-0.1.0-py3-none-any.whl
Shut also makes it easy to publish from within CI jobs. For more information on this, check out the Publishing Guide.
Copyright © 2021 Niklas Rosenstein
Metadata
Release files for shut 0.21.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| shut-0.21.1.tar.gz | 77.2 kB | Without provenance | Details for shut-0.21.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| shut-0.21.1-py3-none-any.whl | Python 3 | none | any | Details for shut-0.21.1-py3-none-any.whl |
Total release size: 235.3 kB
Release files / shut-0.21.1.tar.gz
| Download URL | shut-0.21.1.tar.gz |
|---|---|
| Size | 77.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
16c6fc61bf1d95d09be3abe4474def86aa7d6dbb4e6800b173a2dedbcd246856
|
|
BLAKE2b-256 checksum How to use checksums |
8a91ba5a76fbab5d530229ea1c8d479fba3dc8e5c359869b3f880b6d273bddac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.12
|
Release files / shut-0.21.1-py3-none-any.whl
| Download URL | shut-0.21.1-py3-none-any.whl |
|---|---|
| Size | 158.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7772b68b071e4f134194c5f9acdec8b503804c3009a1339d97a9486d15311c18
|
|
BLAKE2b-256 checksum How to use checksums |
300bcad05d6b2fee9b77243f56286e281f081b886742afb71b0c2006dab958bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.12
|
Security for shut 0.21.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.