Es gibt zwei Möglichkeiten, Abhängigkeiten für Cloud Run-Funktionen festzulegen, die in Python geschrieben wurden: entweder mithilfe der Datei requirements.txt
des Paketmanagers pip oder durch Erstellen eines Pakets, 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.
Das Functions Framework ist eine erforderliche Abhängigkeit für alle Funktionen. Obwohl Cloud Run sie bei der Erstellung der Funktion für Sie installiert, empfehlen wir, sie zur Klarstellung hinzuzufügen.
Abhängigkeiten mit pip angeben
Abhängigkeiten in Python werden mit pip verwaltet und in einer Metadatendatei mit dem Namenrequirements.txt
ausgedrückt.
Diese Datei muss sich im selben Verzeichnis wie die Datei main.py
befinden, die den Funktionscode enthält.
Wenn Sie Ihre Funktion bereitstellen oder noch einmal bereitstellen, verwendet Cloud Run pip, um die neueste Version Ihrer Abhängigkeiten herunterzuladen und zu installieren, wie in der Datei requirements.txt
angegeben.
Die Datei requirements.txt
enthält eine Zeile pro Paket. Jede Zeile enthält den Paketnamen und optional die angeforderte Version. Weitere Informationen finden Sie in der Referenz zu requirements.txt
.
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
Lokale Abhängigkeiten verpacken
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 über den pip-Paketmanager verfügbar ist oder der Internetzugriff Ihrer Cloud Run-Umgebung eingeschränkt ist.
Beispielsweise können Sie eine Verzeichnisstruktur verwenden, die so aussieht:
myfunction/ ├── main.py └── localpackage/ ├── __init__.py └── script.py
Anschließend können Sie den Code mit der folgenden import
-Anweisung wie gewohnt aus localpackage
importieren.
# Code in main.py from localpackage import script
Beachten Sie, dass bei diesem Ansatz keine setup.py
-Dateien ausgeführt werden. Pakete mit diesen Dateien können zwar weiterhin gebündelt werden, werden aber 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 Umgebungsvariable GOOGLE_VENDOR_PIP_DEPENDENCIES
, um kopierte Pip-Abhängigkeiten zu erstellen und diese während der Bereitstellung zu vermeiden.
Kopierte Abhängigkeiten erstellen
Prüfen Sie, ob python3 auf Ihrem Entwicklungssystem installiert ist.
Deklarieren Sie die Anwendungsabhängigkeiten in einer
requirements.txt
-Datei im Stammverzeichnis Ihrer Entwicklungsstruktur.Deklarieren Sie Functions Framework als Anforderung, indem Sie
functions-framework
in eine separate Zeile in Ihrerequirements.txt
-Datei aufnehmen.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.
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:
- 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
311
für Python 3.11:
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
Wenn die Abhängigkeit eine TAR-Datei (*.tar.gz) ist:
Wenn die Abhängigkeit in Python geschrieben ist, laden Sie sie von pip herunter:
python3 -m pip download -r requirements.txt \ -d DIRECTORY
Wenn eine Abhängigkeit aus Code besteht, der in C oder C++ geschrieben ist, müssen Sie diese separat herunterladen und kompilieren.
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:
- 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 die 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 kann private Abhängigkeiten für Ihre Python-Funktion hosten. Bei der Bereitstellung in Cloud Run generiert der Build-Prozess automatisch Artifact Registry-Anmeldedaten für das Cloud Build-Dienstkonto. Sie müssen nur die Artifact Registry-URL in requirements.txt
aufnehmen, 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
Abhängigkeiten werden in einer Umgebung von Cloud Build installiert, die keinen Zugriff auf SSH-Schlüssel bietet. Pakete, die auf Repositories gehostet werden, für die eine SSH-basierte Authentifizierung erforderlich ist, müssen wie im vorangehenden Abschnitt beschrieben zusammen mit dem Code Ihres Projekts kopiert und hochgeladen werden.
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:
Kopieren Sie Ihre Abhängigkeit in ein lokales Verzeichnis:
pip install -t DIRECTORY DEPENDENCY
Fügen Sie dem Verzeichnis
DIRECTORY
eine leere Datei__init__.py
hinzu, um es in ein Modul zu verwandeln.Führen Sie einen Import aus diesem Modul durch, um Ihre Abhängigkeit zu verwenden:
import DIRECTORY.DEPENDENCY
Vorinstallierte Pakete
Die folgenden Python-Pakete werden im Zuge der Bereitstellung automatisch zusammen mit Ihrer Funktion installiert. Wenn Sie eines dieser Pakete im Funktionscode verwenden, sollten Sie die folgenden Versionen in Ihre requirements.txt
-Datei aufnehmen:
Python 3.8 und höher
Python 3.7
* `pip` (latest version)
* `setuptools` (latest version)
* `wheel` (determined by product requirements)
Darüber hinaus enthält die Python-Laufzeit eine Reihe von Systempaketen in der Ausführungsumgebung.