Abhängigkeiten in Python angeben
Es gibt zwei Möglichkeiten, Abhängigkeiten für Cloud Functions-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.
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 Functions 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
Das Functions Framework ist eine erforderliche Abhängigkeit für alle Funktionen. Obwohl Cloud Functions sie bei der Erstellung der Funktion für Sie installiert, empfehlen wir, sie zur Klarstellung hinzuzufügen.
Wenn Ihre Funktion private Abhängigkeiten benötigt, sollten Sie functions-framework
in Ihre private Registry spiegeln. Fügen Sie die gespiegelte functions-framework
als Abhängigkeit zu Ihrer Funktion hinzu, um die Installation des Pakets aus dem öffentlichen Internet zu vermeiden.
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 über den pip-Paketmanager verfügbar ist oder der Internetzugriff Ihrer Cloud Functions-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 weiterhin gebündelt werden, aber in Cloud Functions unter Umständen nicht ordnungsgemäß ausgeführt werden.
Anbieterabhängigkeiten
Anbieterbasierte 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 Abhängigkeiten von Vendor-Anbietern zu erstellen und diese während der Bereitstellung zu vermeiden.
Anbieteranbieter-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 zugehörigen Abhängigkeiten bereit:
gcloud functions deploy FUNCTION_NAME \ --runtime pythonPYTHON_RUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_PIP_DEPENDENCIES=DIRECTORY
Ersetzen Sie:
- FUNCTION_NAME: der Name der Cloud Functions-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 Anbieterabhängigkeiten enthält
Weitere Informationen zur Verwendung von Buildpacks finden Sie unter Funktion mit Buildpacks erstellen.
Private Abhängigkeiten 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 Functions 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 übernommen 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.7
Python 3.8 und höher
* `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. Wenn die Funktion eine Abhängigkeit verwendet, für die ein nicht aufgeführtes Paket erforderlich ist, können Sie ein Paket anfordern.