Compila una aplicación de Python

Los paquetes de compilación admiten la configuración de lenguaje idiomático a través de variables de entorno.

Especifica la versión de Python

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

3.13

Utilizar GOOGLE_PYTHON_VERSION

También es posible especificar la versión de Python a través de la variable de entorno GOOGLE_PYTHON_VERSION. Si ambas configuraciones se establecen, el valor GOOGLE_PYTHON_VERSION tiene prioridad sobre la propiedad .python-version. De forma predeterminada, cuando no se especifican el archivo .python-version y la variable de entorno GOOGLE_PYTHON_VERSION, se usa la última versión de LTS de Python.

Para configurar el paquete de compilación para que use Python 3.13 cuando implementes tu app, 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 proyectos 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.

Especifica dependencias con pip

El paquete de compilación de Python admite la administración de dependencias de aplicaciones mediante pip. Las dependencias de tu aplicación se deben declarar en un archivo requirements.txt en el 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 detalles, consulta la referencia requirements.txt.

El siguiente es un archivo requirements.txt de ejemplo:

requests==2.20.0
numpy

Configura pip

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 para tu función de Python. Cuando compilas una aplicación en Cloud Build, el paquete de compilación de Python generará de forma automática las credenciales de Artifact Registry para la cuenta de servicio de Cloud Build. Solo debes incluir la URL de Artifact Registry en la 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 para el paquete de compilación de Python.

Punto de entrada para las implementaciones de origen de Cloud Run

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

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

Versión 3.12 de Python y versiones anteriores

Si usas la versión 3.12 y versiones anteriores de Python, el paquete de compilación de Python usa Gunicorn de forma predeterminada como el servidor HTTP WSGI para tu carga de trabajo. El paquete de compilación de Python establece el punto de entrada predeterminado en gunicorn -b :8080 main:app.

Python 3.13 y versiones posteriores

Para la versión 3.13 y posteriores de Python, el paquete de compilación de Python establece el punto de entrada predeterminado para las implementaciones de origen de Cloud Run según la configuración del servidor web o del framework en tu archivo requirements.txt. Este parámetro de configuración predeterminado solo se aplica a las implementaciones de código fuente de servicios de Cloud Run, no a las funciones de Cloud Run.

Cuando implementas un servicio de Cloud Run desde la fuente con el entorno de ejecución de Python, el paquete de compilación determina la versión de Python y el punto de entrada predeterminado de las siguientes maneras:

  • Si no especificas una versión de Python en tus archivos fuente, el buildpack de Python establece la versión de Python compatible más reciente como la predeterminada. El buildpack determina el punto de entrada predeterminado según el servidor web o el framework que configuraste en tu archivo requirements.txt.

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

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

    1. gunicorn
    2. uvicorn
    3. fastapi[standard]
    4. gradio
    5. streamlit

Configura el servidor web o el framework

En la siguiente tabla, se muestran los puntos de entrada predeterminados para cada configuración común de Python en el archivo requirements.txt cuando se realiza la implementación 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
fastapi[standard] 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 fuente y especifica un servidor web en tu archivo requirements.txt.

Como alternativa, también puedes especificar el punto de entrada ejecutando el siguiente comando de implementación de código fuente:

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

Reemplaza lo siguiente:

  • SERVICE: Es el nombre del servicio en el que deseas realizar la implementación.
  • ENTRYPOINT: Es el punto de entrada predeterminado que deseas usar para tu código fuente.

Si no puedes implementar 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 todas las demás implementaciones

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

gunicorn --bind :8080 main:app

Personaliza el punto de entrada de la aplicación

Puedes personalizar el comando de inicio de las aplicaciones con un Procfile o una variable de entorno. Es posible que debas hacerlo para personalizar la configuración predeterminada del punto de entrada.

Puedes crear un Procfile con tu configuración personalizada en el directorio raíz. Ejemplo:

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

Como alternativa, 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 configura --default-timeout=60 para los comandos pip.