Deploy guide · runtime = "python"
Ship Python in ~2 minutes.
Managed Python runtime with a multi-stage Dockerfile build. The bundled `python` template scaffolds a FastAPI starter (see [/deploy/fastapi](/deploy/fastapi) for a focused FastAPI guide). Use this page when you're shipping a non-FastAPI Python app — a custom WSGI/ASGI service, a Starlette or Quart app, a small uvicorn-fronted script, or anything that just needs `pip install` to run.
Why Percher fits
- Percher installs dependencies from requirements.txt, uv.lock, poetry.lock or Pipfile.lock and builds a runtime image without a project Dockerfile. Lockfiles require their companion project files.
- Native HTTPS proxy means `requests` and `httpx` reach external APIs out of the box — `HTTPS_PROXY` is honored automatically.
Quick start
bunx percher create my-app --template python
cd my-app
bunx percher publishThe first command scaffolds a working Python project plus a percher.toml. Publish builds and deploys it, then prints the live URL.
percher.toml
The canonical config for a Python app on Percher. bunx percher init generates this automatically when it detects Python in your project.
[app]
name = "my-app"
runtime = "python"
[web]
command = "python -m uvicorn main:app --host 0.0.0.0 --port 8000"
port = 8000
health = "/health"
Common gotchas
- The `python` template id scaffolds FastAPI — if that's not what you want, run `bunx percher init` in your existing project instead; it'll generate a `percher.toml` from whatever's already there.
- Pin a supported Python minor in `.python-version`, or declare supported constraints in `pyproject.toml`. The managed default is Python 3.13; use a Dockerfile for an exact patch version.
- Set `[web].command` to start your WSGI/ASGI server. A bare `pyproject.toml` without a supported lockfile is rejected; do not exclude dependency manifests in `.dockerignore`.