Python web apps, deployed from requirements.txt
Any repo with requirements.txt, pyproject.toml or a Pipfile is built on Python 3.12. We spot Django, FastAPI and Flask and set the right gunicorn or uvicorn command; for anything else we run main.py, app.py or server.py. If your start command uses gunicorn or uvicorn and you forgot to list it, we install it for you.
Free staging (0.25 vCPU · 256 MB · 1 GB) · Live from ₹118.50/month, billed hourly · No servers to manage
Sensible Python defaults, no config files.
When you connect the repository we read it and fill in the build settings below. Every value can be changed in the app’s settings — see build settings.
- Runtime
- Python 3.12 (python:3.12-slim)
- Port
- 8000
- Build command
- pip install -r requirements.txt (or pip install . / pipenv)
- Start command
- python main.py / app.py / server.py (frameworks get gunicorn or uvicorn)
Deploy Python in minutes.
- 1
Pin your dependencies
Commit
requirements.txt(pip freeze > requirements.txt), apyproject.toml, or aPipfile. We install from whichever is present. - 2
Bind to 0.0.0.0:8000
Read the port from the environment:
port = int(os.environ.get('PORT', 8000))and bind to0.0.0.0, not127.0.0.1. - 3
Create the app
In New app select your repo, then leave How to build it on Figure it out for me or choose Python.
- 4
Override the start command if needed
For a Starlette, aiohttp or Sanic app, set Start command, for example
uvicorn server:app --host 0.0.0.0 --port 8000. - 5
Deploy and go live
Check the staging address, read the Logs tab, then click Go live when it looks right.
Running Python well in production.
Staging is free
Every app gets a staging copy in a free, lightweight Docker container (0.25 vCPU · 256 MB · 1 GB). It pauses after 7 days without a deploy — one click starts it again.
- Run Python with unbuffered output so logs appear immediately: set
PYTHONUNBUFFERED=1in Environment variables. - Wheels for packages like psycopg, numpy and Pillow install cleanly on Python 3.12 slim. If a package needs system libraries to compile, add a Dockerfile and install them there.
- Background workers (Celery, RQ) need their own process. Deploy them as a separate app from the same repo with a different start command.
- Write files only under
/data, which is your persistent storage on live. Staging gets its own 1 GB. - Watch memory on the free staging container (256 MB): data-science libraries can exceed it and get stopped with exit code 137.
Trigger
git push
Promote
same image
Rollback
1 click
Python questions.
Can I use Poetry?
Yes. With a `pyproject.toml` we run `pip install .`, which works for Poetry and other PEP 517 build backends.
Which Python version runs my app?
Python 3.12. If you need another version, add a Dockerfile; it is always used when present.
My app exits with code 137. What happened?
It used more memory than its limit and was stopped. Increase memory in Settings, Resources; see [App crashed: out of memory](/docs/app-crashed-out-of-memory).
Ship your Python app today.
Create an account, connect your repository and get a free staging copy plus a live HTTPS address in minutes.