Crear una aplicación Python

Los paquetes de compilación admiten la configuración idiomática de los lenguajes a través de variables de entorno.

Especificar la versión de Python

De forma predeterminada, el paquete de compilación de Python Runtime usa la última versión estable del intérprete de Python. Si tu aplicación requiere una versión específica, puedes especificarla incluyendo un archivo .python-version en el directorio raíz de la aplicación.

3.13

Usar GOOGLE_PYTHON_VERSION

También se puede especificar la versión de Python mediante la variable de entorno GOOGLE_PYTHON_VERSION. Si se definen ambas configuraciones, el valor de GOOGLE_PYTHON_VERSION tiene prioridad sobre el archivo .python-version. De forma predeterminada, si no se especifican el archivo .python-version ni la variable de entorno GOOGLE_PYTHON_VERSION, se usa la versión LTS más reciente de Python.

Para configurar el paquete de compilación para que use Python 3.13 al implementar tu aplicación, haz lo siguiente:

pack build sample-python --builder=gcr.io/buildpacks/builder \
  --env GOOGLE_PYTHON_VERSION="3.13.x"

También puedes usar un descriptor de proyecto project.toml para codificar la variable de entorno junto con los archivos de tu proyecto. Consulta las instrucciones para compilar la aplicación con variables de entorno.

Especificar dependencias con pip

El paquete de compilación de Python permite gestionar las dependencias de las aplicaciones mediante pip. Las dependencias de tu aplicación deben declararse en un archivo requirements.txt del directorio raíz.

El archivo requirements.txt contiene una línea por paquete. Cada línea contiene el nombre del paquete y, opcionalmente, la versión solicitada. Para obtener más información, consulta la referencia de requirements.txt.

A continuación, se muestra un ejemplo de archivo requirements.txt:

requests==2.20.0
numpy

Configurar la función Imagen en imagen

Es posible configurar el comportamiento de pip mediante variables de entorno:

pack build sample-python --builder=gcr.io/buildpacks/builder \
  --env PIP_DEFAULT_TIMEOUT='60'

Dependencias privadas de Artifact Registry

Un repositorio de Python de Artifact Registry puede alojar dependencias privadas de tu función de Python. Al compilar una aplicación en Cloud Build, el paquete de compilación de Python generará automáticamente credenciales de Artifact Registry para la cuenta de servicio de Cloud Build. Solo tiene que incluir la URL de Artifact Registry en su requirements.txt sin generar credenciales adicionales. Por ejemplo:

--extra-index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage

Punto de entrada de la aplicación

En la siguiente sección se describe el punto de entrada predeterminado del paquete de compilación de Python.

Punto de entrada para los despliegues de origen de Cloud Run

Esta función solo está disponible si despliegas tu código fuente en Cloud Run con el tiempo de ejecución de Python. Esta función no se aplica si compilas tu imagen de contenedor directamente con pack build fuera del proceso de despliegue de origen de Cloud Run.

El paquete de compilación de Python es compatible con frameworks web modernos, como FastAPI, Gradio y Streamlit.

Versión 3.12 de Python y anteriores

Si usas la versión 3.12 o una anterior de Python, el paquete de compilación de Python usará Gunicorn de forma predeterminada como servidor HTTP WSGI para tu carga de trabajo. El paquete de compilación de Python define el punto de entrada predeterminado como gunicorn -b :8080 main:app.

Python 3.13 y versiones posteriores

En Python 3.13 y versiones posteriores, el paquete de compilación de Python define el punto de entrada predeterminado de los despliegues de origen de Cloud Run en función de la configuración del servidor web o del framework en el archivo requirements.txt. Este ajuste predeterminado solo se aplica a los despliegues de origen de servicios de Cloud Run, no a las funciones de Cloud Run.

Cuando despliegas un servicio de Cloud Run desde una fuente con el tiempo de ejecución de Python, el buildpack determina la versión de Python y el punto de entrada predeterminado de las siguientes formas:

  • Si no especificas una versión de Python en tus archivos de origen, el paquete de compilación de Python definirá de forma predeterminada la versión de Python más reciente compatible. El buildpack determina el punto de entrada predeterminado en función del servidor web o del framework que hayas configurado en el archivo requirements.txt.

  • Si no especifica un servidor web o un framework en el archivo requirements.txt, el paquete de compilación de Python usará Gunicorn de forma predeterminada como servidor HTTP WSGI para su carga de trabajo. El paquete de compilación de Python define el punto de entrada predeterminado como gunicorn -b :8080 main:app.

  • El paquete de compilación de Python define el punto de entrada predeterminado según el siguiente orden de precedencia, tal como se define en el archivo requirements.txt:

    1. gunicorn
    2. uvicorn
    3. gradio
    4. streamlit.

Configurar el servidor web o el framework

En la siguiente tabla se muestran los puntos de entrada predeterminados de cada configuración común de Python en el archivo requirements.txt al implementar en Cloud Run desde el código fuente:

Configuración principal Punto de entrada predeterminado Variables de entorno
gunicorn gunicorn -b :8080 main:app
numpy gunicorn -b :8080 main:app
fastapi
uvicorn
uvicorn main:app --host 0.0.0.0 --port 8080
uvicorn
gunicorn
gunicorn -b :8080 main:app
gradio python main.py GRADIO_SERVER_NAME=0.0.0.0
GRADIO_SERVER_PORT=8080
streamlit streamlit run main.py --server.address 0.0.0.0 --server.port 8080

Para evitar errores de implementación, usa una versión de Python compatible en tus archivos de origen y especifica un servidor web en el archivo requirements.txt.

También puede especificar el punto de entrada ejecutando el siguiente comando de implementación de origen:

  gcloud run deploy SERVICE --source .  --set-build-env-vars GOOGLE_ENTRYPOINT="ENTRYPOINT"

Haz los cambios siguientes:

  • SERVICE: el nombre del servicio en el que quieras implementar la aplicación.
  • ENTRYPOINT: el punto de entrada predeterminado que quieras usar para tu código fuente.

Si no puedes desplegar tu código fuente en Cloud Run o encuentras errores en los registros, consulta la guía de solución de problemas de Cloud Run.

Punto de entrada para el resto de los despliegues

El paquete de compilación de Python usa Gunicorn como servidor HTTP WSGI predeterminado para tu carga de trabajo. Las aplicaciones creadas con el paquete de compilación de Python inician el proceso gunicorn con la configuración predeterminada, de forma similar a la siguiente:

gunicorn --bind :8080 main:app

Personalizar el punto de entrada de la aplicación

Puedes personalizar el comando de inicio de las aplicaciones mediante una Procfile o una variable de entorno. Es posible que tengas que hacerlo para personalizar las configuraciones de punto de entrada predeterminadas.

Puedes crear un Procfile con tus ajustes personalizados en el directorio raíz. Ejemplo:

web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

También puedes usar la variable de entorno GOOGLE_ENTRYPOINT con el comando pack. Ejemplo:

pack build sample-python \
  --builder gcr.io/buildpacks/builder
  --env "GOOGLE_ENTRYPOINT='gunicorn --bind :$PORT main:app'"

Variables de entorno

El paquete de compilación de Python admite las siguientes variables de entorno para personalizar tu contenedor:

PIP_<key>

Consulta la documentación de pip.

Ejemplo: PIP_DEFAULT_TIMEOUT=60 define --default-timeout=60 para los comandos pip.