DeployGroveDocumentationOpen dashboard

Deploy Python 3.13

Prepare locked Python dependencies and deploy Flask, Django, or FastAPI apps on DeployGrove.

Put the manifest and lockfile at the repository root. Commit source and lockfiles, but keep credentials, local dependencies, virtual environments, and database files out of Git. DeployGrove scans the whole checkout: Dockerfiles, Containerfiles, Compose files, symlinks, Git submodules, package-manager config files, and unsupported dependency sources are rejected, even in unused folders.

Repository layout

my-app/
  pyproject.toml
  uv.lock
  app.py

Use one dependency boundary: uv.lock with pyproject.toml, poetry.lock with pyproject.toml, or requirements.txt for pip. Do not commit two of these manager inputs together.

For pip, every non-comment line must contain one exact version and one SHA-256 hash, on the same line. Include transitive packages too. Version pins alone, multiline hash output, editable installs, and Git or URL dependencies do not pass admission. Generate hashes with your dependency tool, then check its output against this format:

package-name==1.2.3 --hash=sha256:<actual 64-character digest>

The line above shows the format only; replace it with real locked packages and hashes. uv is a simpler choice when your pip exporter writes multiline entries.

A small FastAPI app

from fastapi import FastAPI
app = FastAPI()

@app.get('/')
def home():
    return {'message': 'Hello from DeployGrove'}

Save as app.py. Lock FastAPI, Gunicorn, and Uvicorn as production dependencies. With uv installed locally, use uv add fastapi gunicorn uvicorn and commit pyproject.toml and uv.lock. Choose FastAPI and set the application module to app:app.

Framework and start rules

DeployGrove installs locked production dependencies. Python has no custom build step, and the runtime has no pip or compiler. It starts Gunicorn on 0.0.0.0:8080. FastAPI uses the Uvicorn worker; Flask and Django use WSGI. Keep the server and framework packages in production dependencies.

  • Flask: expose an app object in app.py and use app:app.
  • FastAPI: select FastAPI explicitly when needed so the ASGI worker is used.
  • Django: include manage.py and your project package with wsgi.py. Set the module to myproject.wsgi:application. Configure allowed hosts, secrets, database access, static assets, and migrations before launch.

The module field accepts module.path:attribute, not a shell command or app-factory expression. Serve a successful response at / without login so the health probe can pass.

Ready to release? Follow the deploy steps and account setup.