Python
Se detecta por requirements.txt, Pipfile o pyproject.toml.
Guías de despliegue paso a paso: Python, Django, Flask, FastAPI, Streamlit.
Consulta Buildpackspara ver cómo funcionan la detección y la política de versiones.
Detección
requirements.txt, Pipfile o pyproject.toml en el directorio base.
Versiones
La versión por defecto es Python 3.13. Ramas publicadas a septiembre de 2026: 3.10-3.14. Recibes el último parche de la versión minor solicitada.
Para fijar la versión, por este orden:
.python-versionruntime.txt(python-3.12también vale)requires-pythonenpyproject.toml(un rango elige la versión publicada más alta que encaje)
Instalación y build
poetry.lock: Poetry,poetry install --only mainPipfile.lock: Pipenv,pipenv install --deploy --systemrequirements.txt:pip install -r requirements.txtpyproject.tomlcon[tool.poetry]y sin lockfile: Poetry- En otro caso:
pip install .
El builder instala pip, Poetry y Pipenv en versiones fijadas que funcionan en todas las versiones de Python soportadas. Las actualizamos con regularidad; si despliegas sin cache, tu app recibe las versiones vigentes.
Las apps Django (manage.py más una dependencia de Django) ejecutan collectstatic --noinput. Si ese paso falla, el error queda en los logs y la build no falla.
Al arrancar se define PYTHONUNBUFFERED=1. Django recibe además DJANGO_ENV=production y, si existe un archivo */wsgi.py, DJANGO_SETTINGS_MODULE.
Comando de inicio
- Django:
gunicorn <dir>.wsgi --bind 0.0.0.0:$PORT --workers 3 - FastAPI / Starlette:
uvicorn main:app --host 0.0.0.0 --port $PORT(oapp:appsi la app está en ese archivo) - Flask: Gunicorn sobre
app:app,application:appowsgi:app - En otro caso,
python app.pyopython main.py
Añade gunicorn o uvicorn a tus dependencias si te apoyas en esos comandos por defecto. Puedes sobrescribirlo con un Procfile. Tu app debe escuchar en PORT.
Si no encaja ninguno de estos casos, el Procfile tiene que definir los procesos: al menos una línea válida distinta de release:, por ejemplo web: o worker:. Si no, la build falla con un error en lugar de servir el directorio de la app. Una app que solo tiene worker (un bot, por ejemplo) sin línea web: necesita su propio proceso: en la pestaña Processes, crea un proceso con el mismo nombre que la entrada del Procfile (por ejemplo worker, sin puerto) y pon el proceso web a 0 instancias.