pkgcheck
Pre-publish packaging sanity scanner for Python packages.
twine check validates metadata syntax. It does not verify that your
declared console scripts actually import and run. pkgcheck does — it builds
your wheel and actually imports and invokes every entry point, so an
ImportError or a broken CLI surfaces before you ship a broken sdist to
PyPI.
Part of the Kryptorious developer tool fleet.
What it checks
| Check | Severity | Catches |
|---|---|---|
| PEP 621 fields | error/warning | Missing name, version, readme, requires-python, etc. |
| License file | error | license declared but no LICENSE at repo root |
| Changelog vs version | error | Top CHANGELOG entry doesn't match pyproject version |
| README links | warning | Dead URLs (opt-in, --check-links) |
| Entry-point resolvability | error | module.attr target doesn't import (module or symbol missing) |
| Entry-point callable | error | Target resolves to a non-callable |
| Package importable | error | Top-level package raises on import (e.g. bad __init__) |
| CLI actually runs | error | CLI produces no output when invoked (--help) |
The last four are the differentiator: pkgcheck builds a wheel into a temp dir
and imports from it, so it catches publish-breaking bugs that static metadata
checks miss.
Install
pip install kryptorious-pkgcheck
Usage
# Scan the current package (builds a wheel and tests entry points)
pkgcheck check
# Scan a specific path
pkgcheck check ./my-package
# Machine-readable output for CI — exits non-zero if not publish-ready
pkgcheck check --json
# Skip building a wheel (uses the installed/editable package instead)
pkgcheck check --no-build
# Probe README URLs over the network
pkgcheck check --check-links
In CI
- name: Packaging gate
run: pkgcheck check --json
pkgcheck exits 0 only when the package is publish_ready (no errors,
no blocking issues). Wire it as a required status check before your publish job.
Exit codes
0— publish ready (or--jsonwith zero blocking issues)1— not publish ready (errors present) or human report has errors1— CI JSON mode with blocking issues
License
MIT — see LICENSE.
Metadata
Release files for kryptorious-pkgcheck 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kryptorious_pkgcheck-1.0.0.tar.gz | 11.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kryptorious_pkgcheck-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.8 kB
Release files / kryptorious_pkgcheck-1.0.0.tar.gz
| Download URL | kryptorious_pkgcheck-1.0.0.tar.gz |
|---|---|
| Size | 11.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
256f98ff6bbd10cfd2747cffdaac867d522a37bf33ca80f8f5c2808536d1e664
|
|
BLAKE2b-256 checksum How to use checksums |
51d7323d4a184e1a4406f32699f78ce9a7d128d3fce9025ac26194ebb86812dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Release files / kryptorious_pkgcheck-1.0.0-py3-none-any.whl
| Download URL | kryptorious_pkgcheck-1.0.0-py3-none-any.whl |
|---|---|
| Size | 11.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
957b4a342d68530e0f365066205a38fdbd19e01918b97adf4cc9085c26bc0b74
|
|
BLAKE2b-256 checksum How to use checksums |
335536a229d2585089723dcab3c8b42f8d2bf9c3ae52a217409f549d961ffebf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|