Skip to content
Python hosting

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

What we detect

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)
Step by step

Deploy Python in minutes.

  1. 1

    Pin your dependencies

    Commit requirements.txt (pip freeze > requirements.txt), a pyproject.toml, or a Pipfile. We install from whichever is present.

  2. 2

    Bind to 0.0.0.0:8000

    Read the port from the environment: port = int(os.environ.get('PORT', 8000)) and bind to 0.0.0.0, not 127.0.0.1.

  3. 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. 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. 5

    Deploy and go live

    Check the staging address, read the Logs tab, then click Go live when it looks right.

Tips

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=1 in 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.
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.