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.pyUse 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.pyand useapp:app. - FastAPI: select FastAPI explicitly when needed so the ASGI worker is used.
- Django: include
manage.pyand your project package withwsgi.py. Set the module tomyproject.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.