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-version
  • runtime.txt (python-3.12 también vale)
  • requires-python en pyproject.toml (un rango elige la versión publicada más alta que encaje)

Instalación y build

  • poetry.lock: Poetry, poetry install --only main
  • Pipfile.lock: Pipenv, pipenv install --deploy --system
  • requirements.txt: pip install -r requirements.txt
  • pyproject.toml con [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 (o app:app si la app está en ese archivo)
  • Flask: Gunicorn sobre app:app, application:app o wsgi:app
  • En otro caso, python app.py o python 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.

Dale a tu agente un cloud.

Hasta 15 € de crédito al registrarte.

Continuar con GitHub

o con tu email

Mantente al día.

Novedades del producto, sin spam. Puedes darte de baja cuando quieras.