Skip to main content

deploy_pkg

Zero-click Python package deployment.
Build → GitHub → PyPI in a single command, without prompts.


✨ What is it?

deploy_pkg is a one-file deployment tool that:

  1. Bootstraps a project (creates pyproject.toml, README.md, LICENSE, etc.).
  2. Cleans build artifacts.
  3. Bumps the patch version (X.Y.Z → X.Y.(Z+1)).
  4. Builds an optional frontend (npm install && npm run build if a package.json is found).
  5. Builds your Python package (python -m build) and installs it locally in editable mode.
  6. Initializes a Git repository, or re-uses the existing one.
  7. Creates a GitHub repo via the API (if none exists), adds it as origin, commits, tags, and pushes.
  8. Uploads the freshly built distribution to PyPI with twine.

All of that without asking a single question.


🚀 Quick Start

pip install deploy-pkg        # install the script
deploy-pkg                    # run it in any project directory
  • First run in an empty folder?
    → deploy_pkg scaffolds a minimal package and publishes it immediately.

  • Run it again later?
    → deploy_pkg just bumps the version, rebuilds, commits, tags and republishes.


📦 Installation

From PyPI

pip install deploy_pkg

From source

git clone https://github.com/<you>/deploy_pkg.git
cd deploy_pkg
pip install -e .

🔧 Prerequisites

Tool / Env var Purpose
git version control, pushing to GitHub
Python ≥ 3.8 runtime
GITHUB_TOKEN Personal Access Token with repo + user:email scopes
(optional) npm builds /frontend if present

Create a .env file in your project root:

GITHUB_TOKEN=ghp_XXXXXXXXXXXXXXXXXXXXXXXXXXXX
# PKG_NAME=my_custom_name   # (optional) overrides the default package name

🖥️ Usage

deploy-pkg          # or:  python -m deploy_pkg

Works in any directory:

  • Blank directory → bootstraps + publishes a first 0.0.1 release.
  • Existing package → bumps patch version, rebuilds, commits & tags.
  • Dirty git status → aborts with a clear error (keeps you safe).

How it works – Step by Step

# Action Details
1 Requirements Checks for git, installs missing Python libs (build, twine, toml, requests, python-dotenv).
2 Scaffolding Creates pyproject.toml, README.md, LICENSE, MANIFEST.in, .gitignore if absent.
3 Clean Removes build/, dist/, *.egg-info, __pycache__.
4 Version bump Reads project.version from pyproject, increments patch.
5 Frontend If a package.json exists anywhere: bumps its version, runs npm install & npm run build.
6 Build & install python -m build then pip install -U -e .
7 Git / GitHub Init repo, create GitHub repo (via REST API), add remote, commit "patch update #<ver>", tag v<ver>, push.
8 Publish twine upload dist/* – your new package is live on PyPI.

Any failure aborts the pipeline with a clear, human-friendly error.


CLI Flags

No flags yet. deploy_pkg is intentionally minimal – but a --dry-run or --verbose flag is planned (see Roadmap).


Examples

First-time release

mkdir awesome_pkg
cd awesome_pkg
deploy-pkg
# → 0.0.1 built, repo created on GitHub, uploaded to PyPI, installed locally

Routine patch release

cd awesome_pkg
git status   # should be clean
deploy-pkg
# → 0.0.2 built, commit, tag v0.0.2, push, PyPI upload

Using a custom package name

echo "PKG_NAME=super_lib" >> .env
deploy-pkg

🛡️ Security

  • Access tokens are never printed.
  • Git working tree must be clean or the run aborts (prevents accidental commits).
  • Network operations (requests) use a 10-second timeout and explicit error handling.

🛠 Contributing

Pull Requests welcome!
Clone the repo, install dev deps, run tests (to be added):

pip install -e ".[dev]"
pytest

Feel free to open issues for feature requests or bug reports.


🗺️ Roadmap

  • --dry-run flag (show all steps, no side-effects)
  • Colorised logging (rich)
  • Pre-/post-deploy hooks
  • Config file for per-project overrides
  • Verbose mode with full traceback

🙋 Author

Baptiste – math teacher, Python developer, and despiser of tedious release checklists.


📝 License

deploy_pkg is released under the MIT License – do whatever you want, just keep the copyright.


❤️ Acknowledgements

Inspired by the hundreds of times we forgot one of the following:

  • bumping the version number
  • tagging the commit
  • uploading with Twine
  • pushing the tag
  • building the frontend first…

deploy_pkg never forgets.

Metadata

Release files for deploy-pkg 0.0.12

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for deploy-pkg 0.0.12
File Size Uploaded
deploy_pkg-0.0.12.tar.gz 7.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for deploy-pkg 0.0.12
File Interpreter ABI Platform
deploy_pkg-0.0.12-py3-none-any.whl Python 3 none any Details

Total release size: 14.8 kB

Release files / deploy_pkg-0.0.12.tar.gz

Download URL deploy_pkg-0.0.12.tar.gz
Size 7.1 kB
Tags Source
SHA-256 checksum
How to use checksums
d44f2c21a00c814cb574c009f74ba27f6cf42559191912253beb79f6d6696deb
BLAKE2b-256 checksum
How to use checksums
b3b5b24976b3ccb6bface48966664660eade0258b4d05b3f3c9732f33c797f53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / deploy_pkg-0.0.12-py3-none-any.whl

Download URL deploy_pkg-0.0.12-py3-none-any.whl
Size 7.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
94892e1eba84ab1cd792fced0455824b5a2354ecbcd1960849d7c734d2a73918
BLAKE2b-256 checksum
How to use checksums
744746d3a38875f96d09773b4d3321357d22126191df15df3b414795f32f8bec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.0.12 This release

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page