Abhängigkeiten in Python angeben

Geben Sie die Anwendungsabhängigkeiten für unterstützte Python-Versionen mit einer der folgenden Methoden an:

  • Verwenden Sie eine requirements.txt-Datei im Stammverzeichnis. Diese Datei muss sich im selben Verzeichnis wie die Datei main.py befinden, die den Quellcode enthält. Die Datei requirements.txt enthält eine Zeile pro Paket. Jede Zeile enthält den Paketnamen und optional die angeforderte Version. Es empfiehlt sich, Ihre Abhängigkeitspakete an eine bestimmte Version anzuheften, um zu verhindern, dass Ihr Build von Änderungen an der Abhängigkeitsversion beeinträchtigt wird.

    Hier sehen Sie eine requirements.txt-Beispieldatei:

    functions-framework
    requests==2.20.0
    numpy
    
  • Verwenden Sie eine pyproject.toml-Datei, um Abhängigkeiten anzugeben. Wenn Sie die Anwendungsabhängigkeiten in einer pyproject.toml-Datei anstelle der requirements.txt-Datei verwalten, bestimmt der Python-Buildpack den Paketmanager anhand der Konfiguration, die Sie in der pyproject.toml-Datei angeben. Weitere Informationen finden Sie unter Python-Anwendungen mit einer pyproject.toml-Datei bereitstellen.

    Wenn Ihre Anwendung sowohl die Datei pyproject.toml als auch die Datei requirements.txt verwendet, hat die Datei requirements.txt Vorrang.

    • Hier sehen Sie eine pyproject.toml-Beispieldatei:

      [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"
      
  • Paket mit lokalen Abhängigkeiten erstellen, das neben der Funktion auch lokale Abhängigkeiten enthält.

    Die Abhängigkeitsspezifikation mit dem Standard Pipfile/Pipfile.lock wird nicht unterstützt. Das Projekt sollte diese Dateien nicht enthalten.

    Wenn Sie eine requirements.txt-Datei zum Verwalten von Abhängigkeiten verwenden, installiert Cloud Run das Functions Framework für Sie, wenn Sie eine Funktion erstellen. Wir empfehlen jedoch, das Functions Framework als explizite Abhängigkeit einzuschließen, um Abweichungen zu vermeiden.

    Wenn Sie eine pyproject.toml-Datei verwenden, müssen Sie das Functions Framework als Abhängigkeit einfügen, da es nicht von Cloud Run installiert wird.

Paketmanager

Wenn Sie Ihre Abhängigkeiten mit einem requirements.txt file verwalten, variiert der Standardpaketmanager je nach der von Ihnen konfigurierten Python-Version.

Wenn Sie eine pyproject.toml-Datei zum Verwalten von Abhängigkeiten anstelle einer requirements.txt-Datei verwenden, ermittelt das Python-Buildpack den Paketmanager anhand Ihrer Konfigurationseinstellungen in der pyproject.toml-Datei. Das Buildpack unterstützt die Paketmanager pip, uv und Poetry. Weitere Informationen finden Sie unter Python-Anwendungen mit einer pyproject.toml-Datei bereitstellen.

Python 3.14 und höher

Ab Python-Version 3.14 (Vorschau) und höher verwendet das Python-Buildpack den Paketmanager uv als Standardinstallationsprogramm für die Abhängigkeiten, die Sie in Ihrer requirements.txt-Datei angeben.

Wenn Sie pip als Paketmanager verwenden möchten, konfigurieren Sie die Umgebungsvariable GOOGLE_PYTHON_PACKAGE_MANAGER="pip".

Führen Sie den Befehl gcloud run deploy aus, um die Umgebungsvariable des Paketmanagers auf pip festzulegen:

gcloud run deploy SERVICE --source . \
  --set-build-env-vars=GOOGLE_PYTHON_PACKAGE_MANAGER=pip

Ersetzen Sie SERVICE durch den Namen Ihres Cloud Run-Dienstes.

Python 3.13 und frühere Versionen

Für Python-Version 3.13 und früher verwendet das Python-Buildpack den Paketmanager pip, um Abhängigkeiten zu installieren, die Sie in der Datei requirements.txt definieren.

Wenn Sie uv (Vorabversion) als Paketmanager verwenden möchten, konfigurieren Sie die Umgebungsvariable GOOGLE_PYTHON_PACKAGE_MANAGER="uv".

Führen Sie den Befehl gcloud beta run deploy aus, um die Umgebungsvariable des Paketmanagers auf uv festzulegen:

gcloud beta run deploy SERVICE --source . \
  --set-build-env-vars=GOOGLE_PYTHON_PACKAGE_MANAGER=uv

Ersetzen Sie SERVICE durch den Namen Ihres Cloud Run-Dienstes.

Paket mit lokalen Abhängigkeiten erstellen

Sie können auch ein Paket mit der Funktion und ihren Abhängigkeiten erstellen und bereitstellen. Dies ist nützlich, wenn Ihre Abhängigkeit nicht verfügbar ist, wenn Sie einen unterstützten Paketmanager verwenden, oder wenn der Internetzugriff Ihrer Cloud Run-Umgebung eingeschränkt ist.

Sie können auch eine requirements.txt-Datei verwenden, um zusätzliche Abhängigkeiten anzugeben, die sich nicht im Paket mit der Funktion befinden. Beispielsweise können Sie die folgende Verzeichnisstruktur verwenden:

myfunction/
├── main.py
└── localpackage/
    ├── __init__.py
    └── script.py

Importieren Sie den Code mit der folgenden import-Anweisung aus localpackage:

# code in main.py
from localpackage import script

Bei diesem Ansatz werden keine setup.py-Dateien ausgeführt. Sie können die Pakete mit diesen Dateien bündeln, aber das Paket wird in Cloud Run Functions unter Umständen nicht ordnungsgemäß ausgeführt.

Kopierte Abhängigkeiten

Kopierte Abhängigkeiten sind Abhängigkeiten, deren Quelle direkt in Ihrem Quellcodepaket enthalten und zusammen mit Ihrem eigenen Code neu erstellt wird. Verwenden Sie die Build-Umgebungsvariable GOOGLE_VENDOR_PIP_DEPENDENCIES, um kopierte Pip-Abhängigkeiten zu erstellen und die Installation während der Bereitstellung zu vermeiden.

Kopierte Abhängigkeiten erstellen

  1. Prüfen Sie, ob python3 auf Ihrem Entwicklungssystem installiert ist.

  2. Deklarieren Sie die Anwendungsabhängigkeiten in einer requirements.txt-Datei im Stammverzeichnis Ihrer Entwicklungsstruktur.

  3. Deklarieren Sie Functions Framework als Anforderung, indem Sie functions-framework in eine separate Zeile in Ihre requirements.txt-Datei aufnehmen.

  4. Laden Sie die Abhängigkeiten Ihrer Funktion in das lokale Verzeichnis herunter. Die dafür erforderlichen Schritte hängen davon ab, ob die Abhängigkeit eine Python-Rad-Datei (*.whl) oder eine TAR-Datei (*.tar.gz) ist.

    1. Wenn die Abhängigkeit ein Python-Rad (*.whl) ist, laden Sie sie mit diesem pip-Befehl in das Stammverzeichnis Ihres Entwicklungsbaums herunter:

      python3 -m pip download -r requirements.txt --only-binary=:all: \
         -d DIRECTORY \
         --python-version PYTHON_RUNTIME_VERSION \
         --platform manylinux2014_x86_64 \
         --implementation cp
      

      Ersetzen Sie Folgendes:

      • DIRECTORY: der Name des lokalen Verzeichnisses, in das heruntergeladen werden soll.
      • PYTHON_RUNTIME_VERSION: Die Python-Version, die für Kompatibilitätsprüfungen verwendet werden soll. Beispiel 314 für Python 3.14:
        Diese Version muss mit einer der unterstützten Python-Laufzeiten übereinstimmen.

      Die resultierende Verzeichnisstruktur sollte so aussehen:

      myfunction/
      ├── main.py
      └── requirements.txt
      └── DIRECTORY
         ├── dependency1.whl
         └── dependency2.whl
      

    2. Wenn die Abhängigkeit eine TAR-Datei (*.tar.gz) ist:

      1. Wenn die Abhängigkeit in Python geschrieben ist, laden Sie sie von pip herunter:

        python3 -m pip download -r requirements.txt \
           -d DIRECTORY
        
      2. Wenn eine Abhängigkeit aus Code besteht, der in C oder C++ geschrieben ist, müssen Sie diesen Code separat herunterladen und kompilieren.

  5. Stellen Sie die Funktion und die kopierten Abhängigkeiten bereit:

    gcloud functions deploy FUNCTION_NAME \
      --runtime PYTHON_RUNTIME_NAME \
      --set-build-env-vars GOOGLE_VENDOR_PIP_DEPENDENCIES=DIRECTORY
    

    Ersetzen Sie Folgendes:

    • FUNCTION_NAME: der Name der Funktion, die Sie bereitstellen.
    • PYTHON_RUNTIME_NAME: der Name einer der unterstützten Python-Laufzeiten, unter der die bereitgestellte Funktion ausgeführt wird, z. B. python311. Dies muss dieselbe Python-Laufzeitversion sein, die Sie in Ihrer lokalen Entwicklungsumgebung verwendet haben.
    • DIRECTORY: der Name des Verzeichnisses, das Ihre kopierten Abhängigkeiten enthält.

Weitere Informationen zur Verwendung von Buildpacks finden Sie unter Funktion mit Buildpacks erstellen.

Private Abhängigkeiten verwenden

Sie können private Abhängigkeiten aus Artifact Registry oder aus anderen Repositories verwenden.

Private Abhängigkeiten von Artifact Registry

Ein Artifact Registry-Python-Repository hostet private Abhängigkeiten für Ihre Python-Funktion. Bei der Bereitstellung in Cloud Run generiert der Build-Prozess automatisch Artifact Registry-Anmeldedaten für das Cloud Build-Dienstkonto. Nehmen Sie die Artifact Registry-URL in requirements.txt auf, ohne zusätzliche Anmeldedaten zu generieren. Beispiel:

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

Wenn Ihr Build mehrere Repositories benötigt, können Sie mit einem virtuellen Artifact Registry-Repository die Reihenfolge, in der pip Ihre Repositories durchsucht, sicher steuern.

Private Abhängigkeiten aus anderen Repositories

Buildpacks installieren Abhängigkeiten in einer Cloud Build-Umgebung, die keinen Zugriff auf SSH-Schlüssel bietet. Kopieren Sie die Pakete, die Sie in Repositories hosten, für die eine SSH-basierte Authentifizierung erforderlich ist, und laden Sie die Pakete mit dem Code Ihres Projekts hoch.

Sie können den Befehl pip install mit dem Flag -t DIRECTORY verwenden, um private Abhängigkeiten vor der Bereitstellung Ihrer Anwendung in ein lokales Verzeichnis zu kopieren:

  1. Kopieren Sie Ihre Abhängigkeit in ein lokales Verzeichnis:
    pip install -t DIRECTORY DEPENDENCY
  2. Fügen Sie dem Verzeichnis DIRECTORY eine leere Datei __init__.py hinzu, um es in ein Modul zu verwandeln.
  3. Führen Sie einen Import aus diesem Modul durch, um Ihre Abhängigkeit zu verwenden:
    import DIRECTORY.DEPENDENCY

Vorinstallierte Pakete

Das Python-Buildpack installiert die folgenden Python-Pakete, wenn Sie Ihre Funktion bereitstellen. Wenn Sie eines dieser Pakete im Funktionscode verwenden, sollten Sie die folgenden Versionen in Ihre requirements.txt-Datei aufnehmen:

Um Probleme mit Updates der Abhängigkeitsversion zu vermeiden, pinnen Sie das Paket an eine bestimmte Version an.

anyio==4.5.2
blinker==1.8.2
click==8.1.8
cloudevents==1.11.0
deprecation==2.1.0
exceptiongroup==1.3.0
Flask==3.0.3
functions-framework==3.9.1
gunicorn==23.0.0
h11==0.16.0
idna==3.10
importlib_metadata==8.5.0
itsdangerous==2.2.0
Jinja2==3.1.6
MarkupSafe==2.1.5
packaging==25.0
sniffio==1.3.1
# Install starlette 0.44.0 for Python 3.8
starlette==0.44.0; python_version == '3.8'
# Install starlette 0.49.1 for Python versions greater than 3.8
starlette==0.49.1; python_version > '3.8'
typing_extensions==4.13.2
uvicorn==0.33.0
uvicorn-worker==0.2.0
watchdog==4.0.2
Werkzeug==3.0.6
zipp==3.20.2

Das Python-Buildpack installiert die folgenden Pakete, die an eine bestimmte Version angepinnt sind:

  • pip (aktuelle Version)
  • setuptools (aktuelle Version)
  • wheel (wird durch die Produktanforderungen bestimmt)

Die Python-Laufzeit enthält auch eine Reihe von Systempaketen in der Ausführungsumgebung.