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.14
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, sigue estos pasos:
pack build sample-python --builder=gcr.io/buildpacks/builder \
--env GOOGLE_PYTHON_VERSION="3.14.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
Especifica las dependencias de tu aplicación para las versiones de Python compatibles con cualquiera de los siguientes métodos:
Usa un archivo
requirements.txten el directorio raíz. Este archivo debe estar en el mismo directorio que el archivomain.pyque contiene el código fuente. El archivorequirements.txtcontiene una línea por paquete. Cada línea contiene el nombre del paquete y, opcionalmente, la versión solicitada. Para evitar que la compilación se vea afectada por los cambios en la versión de las dependencias, te recomendamos que fijes los paquetes de dependencias a una versión específica.A continuación, se muestra un ejemplo de archivo
requirements.txt:functions-framework requests==2.20.0 numpyUsa un archivo
pyproject.tomlpara especificar las dependencias. Si gestionas las dependencias de tu aplicación en un archivopyproject.tomlen lugar de en el archivorequirements.txt, el paquete de compilación de Python determinará el gestor de paquetes en función de la configuración que especifiques en el archivopyproject.toml. Para obtener más información, consulta el artículo Desplegar aplicaciones Python con un archivopyproject.toml.Si tu aplicación usa tanto el archivo
pyproject.tomlcomo el archivorequirements.txt, este último tiene prioridad.requirements.txtA continuación, se muestra un ejemplo de archivo
pyproject.toml:[project] name = "demo-app" version = "0.1.0" description = "" requires-python = ">=3.10" dependencies = [ "flask>=3.1.1", "gunicorn>=23.0.0", ] [build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta"
Gestor de paquetes
Si gestionas tus dependencias con un requirements.txt file, el gestor de paquetes predeterminado varía en función de la versión de Python que configures.
Si usas un archivo pyproject.toml para gestionar las dependencias en lugar de un archivo requirements.txt, el paquete de compilación de Python determinará el gestor de paquetes en función de los ajustes de configuración del archivo pyproject.toml. El buildpack es compatible con los gestores de paquetes pip, uv y Poetry. Para obtener más información, consulta Implementar aplicaciones de Python con un archivo pyproject.toml.
Python 3.14 y versiones posteriores
A partir de la versión 3.14 (vista previa) de Python, el paquete de compilación de Python usa el gestor de paquetes uv como instalador predeterminado de las dependencias que especifiques en el archivo requirements.txt.
Para usar pip como gestor de paquetes, configura la variable de entorno GOOGLE_PYTHON_PACKAGE_MANAGER="pip".
Python 3.13 y versiones anteriores
En las versiones de Python 3.13 y anteriores, el paquete de compilación de Python usa el administrador de paquetes pip para instalar las dependencias que definas en el archivo requirements.txt.
Para usar uv (vista previa) como gestor de paquetes, configura la variable de entorno GOOGLE_PYTHON_PACKAGE_MANAGER="uv".
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 para 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 tu 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 comogunicorn -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:gunicornuvicornfastapi[standard]gradiostreamlit
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 |
|
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 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 las implementaciones
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.
Desplegar aplicaciones Python con un archivo pyproject.toml
Los buildpacks de Python admiten proyectos que configures con el archivo pyproject.toml. Esta función te permite desplegar aplicaciones que gestionas con Poetry, uv o pip directamente en Cloud Run y Cloud Run Functions. Esta función no está disponible en App Engine.
El paquete de compilación de Python solo usa el archivo pyproject.toml cuando no hay ningún archivo requirements.txt en el directorio raíz. Si tu aplicación usa tanto el archivo pyproject.toml como el archivo requirements.txt, este último tiene prioridad.requirements.txt
Configuraciones de buildpacks admitidas
Los buildpacks de Python admiten las siguientes configuraciones:
Buildpack de pip: instala las dependencias directamente desde
pyproject.tomlsi detecta que se cumplen todas las condiciones siguientes:Hay un archivo
pyproject.tomlen el directorio raíz y no has configurado herramientas de alta prioridad, como un archivopoetry.lock, una sección[tool.poetry]o un archivouv.lock.Has definido la variable de entorno
GOOGLE_PYTHON_PACKAGE_MANAGERcomopip.
Paquete de compilación uv: admite proyectos de Python que gestionas con uv. Este paquete de compilación se activa si detecta alguna de las siguientes condiciones:
- Hay un archivo
uv.locky un archivopyproject.tomlen la raíz del proyecto. - Hay un archivo
pyproject.tomlen la raíz del proyecto y has asignado el valoruva la variable de entornoGOOGLE_PYTHON_PACKAGE_MANAGER. - Hay un archivo
pyproject.tomly no incluyes otros archivos de bloqueo de alta precedencia, comopoetry.lockouv.lock, ni configuraciones como[tool.poetry], y no defines la variable de entornoGOOGLE_PYTHON_PACKAGE_MANAGER.
- Hay un archivo
Buildpack de Poetry: admite proyectos de Python que gestionas con Poetry. Este buildpack se activa si detecta alguna de las siguientes condiciones:
- En la raíz del proyecto hay un archivo
poetry.locky un archivopyproject.toml. - Hay un archivo
pyproject.tomlen la raíz del proyecto y una sección[tool.poetry]en el archivopyproject.toml.
- En la raíz del proyecto hay un archivo
Precedencia del gestor de paquetes
Los buildpacks de Python determinan el gestor de paquetes predeterminado en función de la configuración, según el siguiente orden de prioridad:
Se da la máxima prioridad al archivo
requirements.txt. Solo si este archivo está presente, el paquete de compilación de Python usará el gestor de paquetes predeterminado para instalar las dependencias en el paso de compilación. Si no hay ningún archivorequirements.txt, el proceso de detección pasa al siguiente paso.A continuación, el paquete de compilación comprueba el archivo
pyproject.tomlpara ver si hay un archivopoetry.locko una sección[tool.poetry]. Si se encuentra, el proceso de compilación continúa usando Poetry para instalar las dependencias.Si no se detecta la configuración de Poetry, el paquete de compilación busca un archivo
uv.lock. Si se encuentra, el proceso de compilación continúa usando uv para instalar las dependencias.Si no hay archivos de bloqueo, el paquete de compilación comprueba la variable de entorno
GOOGLE_PYTHON_PACKAGE_MANAGERpara ver si hay una configuraciónpipouv.Predeterminado. Si no defines una variable de entorno y solo usas un archivo
pyproject.tomlsin uv ni Poetry, el paquete de compilación usará de forma predeterminada uv para todas las versiones de Python compatibles.
Punto de entrada con un archivo pyproject.toml
Cuando implementas una aplicación con un archivo pyproject.toml en lugar de usar un archivo requirements.txt, el paquete de compilación de Python usa un método diferente para determinar el punto de entrada. Para obtener información sobre cómo configurar un punto de entrada de aplicación con un archivo requirements.txt, consulta Punto de entrada de aplicación.
El paquete de compilación busca un punto de entrada en el siguiente orden de prioridad:
Si hay un archivo
Procfileen tu directorio raíz o configuras la variable de entornoGOOGLE_ENTRYPOINT, estas configuraciones siempre anularán cualquier punto de entrada determinado por las secuencias de comandospyproject.toml.El paquete de compilación de Python utiliza las secuencias de comandos personalizadas que configures en las secciones
[tool.poetry.scripts]y[project.scripts]. Si configuras una secuencia de comandos que incluyestart, este es tu punto de entrada. Por ejemplo,poetry run startouv run start.Si no configuras una secuencia de comandos
start, pero defines otra, esta será el punto de entrada predeterminado. Por ejemplo,poetry run mycmdouv run mycmd.
A diferencia de las compilaciones basadas en requirements.txt, el paquete de compilación de Python no instala gunicorn automáticamente para los proyectos de pyproject.toml. Para usar gunicorn o cualquier otro servidor, debes añadirlo explícitamente a las dependencias de tu archivo pyproject.toml.
Si no configuras scripts personalizados en el archivo pyproject.toml, los buildpacks intentarán detectar frameworks comunes, como gunicorn, uvicorn o fastapi, a partir de las dependencias de pyproject.toml y determinarán un punto de entrada predeterminado.