reldoctor
Upload day is too late to find out your release is broken. Audit built artifacts — the exact wheel and sdist you're about to upload — the way PyPI and pip will read them:
- Versions: PEP 440 parseability, PyPI-illegal local segments (
+local), dev releases, wheel/sdist agreement, METADATA vs filename agreement - Metadata: Name/Version vs filename, Summary, Requires-Python, license field or classifier, long description +
Description-Content-Type(so PyPI renders it instead of dumping raw text) - Structure: exactly one
.dist-info,WHEELandRECORDpresent, RECORD actually covering the files, supported Metadata-Version - Entry points:
console_scriptslines that parse (name = pkg.module:attr) - Sdist: top-level root dir,
pyproject.toml/setup.py,PKG-INFO, LICENSE/COPYING file - Cross-artifact: name and version drift between wheel and sdist
Install
pip install reldoctor
Usage
python -m build # build your dists
reldoctor dist/ # audit them
reldoctor dist/ --strict # warnings fail too (release mode)
reldoctor dist/ --json # machine-readable
WARN missing_sdist no sdist built; PyPI encourages shipping one
WARN no_content_type long description present but no Description-Content-Type...
2 error(s), 2 warning(s) — PASS
Exit codes: 0 clean (warnings allowed unless --strict), 1 findings, 2 usage error.
Release workflow
- run: pip install build reldoctor
- run: python -m build
- run: reldoctor dist/ --strict
- run: twine upload dist/*
Notes
- Inspects artifacts, not sources —
reldoctorreads the zips and tarballs, so what it checks is what installers get. - Pure stdlib: no
packaging, notwineimport. It complements (doesn't replace)twine check. - Info-level findings (like the sdist version it found) never affect the exit code.
License
MIT-style: use it, ship it, no warranty.
Metadata
Release files for reldoctor 0.1.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 | Provenance | |
|---|---|---|---|---|
| reldoctor-0.1.0.tar.gz | 9.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| reldoctor-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.7 kB
Release files / reldoctor-0.1.0.tar.gz
| Download URL | reldoctor-0.1.0.tar.gz |
|---|---|
| Size | 9.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e0798a343ff9d9adeea276c36912fc0ab5770db61ab063a33be503ddcb3b50e1
|
|
BLAKE2b-256 checksum How to use checksums |
b1225132b9a92d8b2067a7e54224ff8b4685e1df42ca793e3c7e281bd80d9b13
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Release files / reldoctor-0.1.0-py3-none-any.whl
| Download URL | reldoctor-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
904b4406d7d8c3d13b14d434beb04cb4d40d1478f3040dd26796859a01c80578
|
|
BLAKE2b-256 checksum How to use checksums |
19a4f53cc86af14e7d87e59e6cb6dcd16367fdb24ca723da18baa6dae5b8e255
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Security for reldoctor 0.1.0
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.