View a markdown version of this page

Verwenden von virtuellen Python-Umgebungen mit AWS Glue - AWS Glue

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von virtuellen Python-Umgebungen mit AWS Glue

Ab AWS Glue 5.0 können Sie Ihre ETL-Jobs in einer virtuellen Python-Umgebung (venv) ausführen. Virtuelle Umgebungen entfernen die Auflösung von Laufzeitabhängigkeiten aus Ihren Jobausführungen, stellen sicher, dass bei jeder Ausführung dieselben Pakete verwendet werden, und verhindern Fehler, die durch Upstream-Paketänderungen verursacht werden.

AWS Glue unterstützt zwei Möglichkeiten, eine virtuelle Umgebung zu verwenden:

  • Service-generated virtuelle Umgebung — Verfügbar in AWS Glue 6.0 und höher. Sie fügen den --python-virtual-env-storage-prefix Parameter hinzu, und AWS Glue erstellt die virtuelle Umgebung für Sie und speichert sie in Amazon S3 für spätere Auftragsausführungen im Cache. Es ist kein lokaler Build erforderlich.

  • Manuell erstellte virtuelle Umgebung — Verfügbar in AWS Glue 5.0 und höher. Sie erstellen die virtuelle Umgebung auf Ihrem lokalen Computer oder in einer CI/CD Pipeline, laden sie auf Amazon S3 hoch und referenzieren sie mit dem --python-virtual-env Parameter.

In diesem Thema wird beschrieben, wie Jobs migriert werden, --additional-python-modules die beide Methoden verwenden. Hinweise zu anderen Methoden zur Verwaltung von Python-Abhängigkeiten finden Sie unterVerwenden von Python-Bibliotheken mit AWS Glue.

Hauptunterschiede zu --additional-python-modules

Die folgende Tabelle wird --additional-python-modules mit einer manuell erstellten virtuellen Umgebung verglichen.

Feature

--additional-python-modules

--python-virtual-env

Basis-Container-Bibliotheken (boto3numpypandas,, und andere)

Automatisch verfügbar

Nicht verfügbar. Sie müssen alle erforderlichen Pakete in das Venv aufnehmen.

Auflösung von Abhängigkeiten

Tritt zur Laufzeit auf

Tritt bei der Erstellung auf Ihrem Computer auf

Isolierung zur Laufzeit

Teilweise. Pakete werden zusätzlich zu den Basisbibliotheken installiert.

Voll. Ersetzt die Python-Umgebung vollständig.

Wichtig

Wenn Sie zu migrieren--python-virtual-env, müssen Sie jedes Python-Paket, das Ihr Job benötigt, in die virtuelle Umgebung aufnehmen. Dazu gehören Pakete, die zuvor im AWS Glue-Basiscontainer verfügbar warenboto3, wienumpy, undpandas. Diese Pakete sind nicht mehr implizit verfügbar.

Auswahl des Ansatzes

Entscheiden Sie anhand der folgenden Tabelle, welcher Ansatz für Ihre Aufgabe geeignet ist.

Szenario

Empfohlener Ansatz

Einfache Jobs mit wenigen Pip-Paketen, bei denen Sie keinen Build-Overhead benötigen

Service-generated venv (hinzufügen--python-virtual-env-storage-prefix). Benötigt AWS Glue 6.0 oder höher.

Komplexe Abhängigkeitsbäume, vollständige Reproduzierbarkeit oder eine CI/CD Pipeline, die das Venv erstellt

Manuell erstelltes venv (). --python-virtual-env Benötigt AWS Glue 5.0 oder höher.

Migration von --additional-python-modules mit minimalen Änderungen

Service-generated venv (hinzufügen--python-virtual-env-storage-prefix). Benötigt AWS Glue 6.0 oder höher. Verwenden AWS Sie auf Glue 5.0 und 5.1 stattdessen eine manuell erstellte virtuelle Umgebung.

Privater PyPI Index mit benutzerdefinierten Paketen

Beider Ansatz. Das vom Dienst generierte Venv benötigt AWS Glue 6.0 oder höher und funktioniert mit. --python-modules-installer-option

Verwendung einer vom Service generierten virtuellen Umgebung mit Amazon S3-Caching

Ab AWS Glue 6.0 können Sie den --python-virtual-env-storage-prefix Parameter verwenden, damit AWS Glue die virtuelle Umgebung erstellt und in Amazon S3 zwischenspeichert. Dieser Ansatz kombiniert die Einfachheit einer zwischengespeicherten virtuellen Umgebung --additional-python-modules mit dem Leistungsvorteil.

Funktionsweise

Wenn Sie etwas angeben--python-virtual-env-storage-prefix, geht AWS Glue wie folgt vor:

  • Beim ersten Durchlauf (Cache-Fehler) — AWS Glue erstellt eine virtuelle Umgebung mit--system-site-packages, die Containerpakete wie numpypandas, und pyarrow erbt. AWS Glue installiert dann die Pakete --additional-python-modules mit pip, verpackt die virtuelle Umgebung als .tar.gz Datei und lädt sie zur späteren Wiederverwendung in Ihr Amazon S3-Präfix hoch.

  • Bei späteren Läufen (Cache-Treffer) — AWS Glue lädt die zwischengespeicherte .tar.gz Datei von Amazon S3 herunter, extrahiert sie und konfiguriert den Spark-Treiber und die Executoren so, dass sie die virtuelle Umgebung verwenden. Es findet keine Pip-Installation statt.

Unterschiede zu einer manuell erstellten virtuellen Umgebung

In der folgenden Tabelle wird die vom Dienst generierte virtuelle Umgebung mit dem manuell erstellten Ansatz verglichen.

Feature

Service-generated venv

Manuell gebautes Venv

Verantwortung aufbauen

AWS Glue baut das Venv automatisch

Du baust das Venv ein Docker

Container-Pakete

Vererbt durch --system-site-packages

Sie müssen alle Pakete explizit einschließen

First-run Latenz

Zusätzliche Zeit für Pip-Installation, Paketierung und Amazon S3-Upload

Keine, weil das Venv vorgebaut ist

Later-run Latenz

Zusätzliche Zeit für das Herunterladen und Extrahieren von Amazon S3

Zusätzliche Zeit für das Herunterladen und Extrahieren von Amazon S3

Determinismus

Wir empfehlen, Paketversionen zu pinnen

Vollständig deterministisch, da Versionen zum Zeitpunkt der Erstellung gesperrt werden

PyPI-Zugriff

Beim ersten Durchlauf erforderlich

Nicht erforderlich, da das Venv offline erstellt wird

Konfiguration einer dienstgenerierten virtuellen Umgebung

Der --python-virtual-env-storage-prefix Parameter gibt den Amazon S3-Speicherort an, an dem AWS Glue die virtuelle Umgebung, die es erstellt, im Formular s3://path/ speichert. AWS Glue speichert die virtuelle Umgebung bei der ersten Auftragsausführung unter diesem Präfix im Cache und verwendet sie bei späteren Ausführungen wieder.

Um eine vom Dienst generierte virtuelle Umgebung zu aktivieren, fügen Sie den --python-virtual-env-storage-prefix Parameter zu Ihrem Job hinzu und behalten Sie Ihren vorhandenen Parameter bei. --additional-python-modules

"--additional-python-modules": "requests==2.32.3,scikit-learn==1.5.0" "--python-virtual-env-storage-prefix": "s3://amzn-s3-demo-bucket/venv-cache/"

Sie können auch die folgenden optionalen Parameter verwenden:

  • --python-virtual-env-version— Eine Versionskennung für die zwischengespeicherte virtuelle Umgebung. Ändern Sie diesen Wert, um den Cache ungültig zu machen und AWS Glue zu zwingen, die virtuelle Umgebung neu zu erstellen. Der Wert ist eine Zeichenfolge, sodass Sie das für Ihren Workflow geeignete Versionsschema verwenden können, z. B. eine inkrementelle Zahl, ein Datum oder eine Build-ID. Der Standardwert ist 0.

  • --python-modules-installer-option— Übergibt Optionen an pip, wie z. B. oder. --no-deps --index-url

Um das Caching für einen vorhandenen Job zu aktivieren, fügen Sie den Parameter für das Speicherpräfix hinzu. Die erste Ausführung dauert länger, da AWS Glue die virtuelle Umgebung erstellt und hochlädt. Spätere Läufe verwenden jedoch die zwischengespeicherte virtuelle Umgebung und führen keine Pip-Auflösung durch.

# Before "--additional-python-modules": "requests==2.32.3" # After "--additional-python-modules": "requests==2.32.3" "--python-virtual-env-storage-prefix": "s3://amzn-s3-demo-bucket/venv-cache/"

Wie AWS Glue speichert die virtuelle Umgebung im Cache

AWS Glue speichert den Cache entsprechend Ihrer Jobkonfiguration. Die Konfiguration beinhaltet die Module von--additional-python-modules, den Wert von--python-modules-installer-option, die AWS Glue-Version und den Wert von--python-virtual-env-version.

Eine unveränderte Konfiguration führt zu einem Cache-Treffer. Wenn Sie einen dieser Werte ändern, erstellt AWS Glue eine neue virtuelle Umgebung und erstellt einen neuen Cache-Eintrag.

AWS Glue speichert jede zwischengespeicherte virtuelle Umgebung unter einem separaten Schlüssel in Ihrem Speicherpräfix. Jobs, die dieselben Module und Installationsoptionen verwenden, verwenden denselben Cache-Eintrag.

Einschränkungen

  • Erfordert AWS Glue 6.0 oder höher.

  • Für die erste Ausführung ist Zugriff PyPI auf oder auf Ihren privaten Index erforderlich, um Abhängigkeiten aufzulösen.

  • Containerpakete wie numpy und pandas werden vererbt, aber nicht versionsgebunden. Wenn Ihr Job genaue Versionen von Containerpaketen erfordert, verwenden Sie stattdessen. --python-virtual-env

  • Der Cache wird durch die Konfiguration verschlüsselt. Wenn Sie ein Modul oder eine Version ändern, wird ein neuer Cache-Eintrag erstellt. Frühere Einträge verbleiben in Amazon S3, bis Sie sie entfernen.

Erstellen Sie Ihre eigene virtuelle Umgebung

In AWS Glue 5.0 und höher können Sie selbst eine virtuelle Umgebung erstellen und sie mit dem --python-virtual-env Parameter referenzieren. Verwenden Sie diesen Ansatz, wenn Sie vollständige Reproduzierbarkeit, exakte Versionen von Containerpaketen oder einen Build benötigen, der in einer CI/CD Pipeline ausgeführt wird.

Voraussetzungen

Stellen Sie vor dem Beginn sicher, dass Sie über Folgendes verfügen:

  • Dockervon der Docker Website, die auf Ihrem lokalen Computer installiert ist, sodass Sie die virtuelle Umgebung in einer Umgebung erstellen können AWS Glue-compatible

  • Ein Amazon S3-Bucket zum Hochladen der verpackten virtuellen Umgebung

  • Die AWS CLI wurde mit Berechtigungen zum Hochladen auf Amazon S3 und zum Aktualisieren der AWS Glue-Jobparameter konfiguriert

Einzelheiten zur Python-Version und Plattformkompatibilität für jede AWS Glue-Version finden Sie unterAnhang B: AWS Einzelheiten zur Umgebung von Glue.

Schritt 1: Erstellen Sie Ihre Anforderungsdateien

Erstellen Sie zwei Anforderungsdateien, die die Pakete für Ihre virtuelle Umgebung definieren.

  1. Laden Sie base-requirements.txt Ihre AWS Glue-Version aus dem aws-glue-libs Repository auf der GitHub Website herunter. Diese Datei listet die Pakete auf, die der AWS Standard-Glue-Container bereitstellt. Dieselbe Liste in diesem Handbuch finden Sie unterPython-Module sind bereits verfügbar in AWS Glue.

  2. Geben Sie einen Namen für den Benutzer ein und klicken Sie dann auf additional-requirements.txt. Fügen Sie die Pakete aus Ihrem vorhandenen --additional-python-modules Parameter hinzu, eines pro Zeile. Beispiel:

    cryptography requests-oauthlib sqlalchemy
Wichtig

Wenn Ihr Job die AWS Glue-Python-Bibliothek wie GlueContext oder verwendetDynamicFrame, müssen Sie auch das AWSGlueDataplanePython Paket von der PyPI Website einbeziehen. Verwenden Sie die Version, die Ihrer AWS Glue-Version entspricht, wie in der folgenden Tabelle gezeigt.

AWS Glue-Version

Version des Pakets

5.0

AWSGlueDataplanePython==5.0.0

5.1

AWSGlueDataplanePython==5.1.0

6.0

AWSGlueDataplanePython==6.0.0

Schritt 2: Erstellen Sie eine Dockerfile

Erstellen Sie eineDockerfile, die der Umgebung Ihrer AWS Glue-Zielversion entspricht. Einzelheiten zur Plattform und Python-Version finden Sie unterAnhang B: AWS Einzelheiten zur Umgebung von Glue.

AWS Glue 5.0 und 5.1 verwenden Python 3.11 auf Amazon Linux 2023.

FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal RUN dnf install -y python3.11 zip && \ dnf clean all WORKDIR /build

AWS Glue 6.0 verwendet Python 3.13 auf Amazon Linux 2023.

FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal RUN dnf install -y python3.13 zip && \ dnf clean all WORKDIR /build

Schritt 3: Erstellen und starten Sie den Container

Erstellen Sie das Docker Bild. Starten Sie dann einen Container mit Ihren Anforderungsdateien und dem gemounteten Job-Skript.

docker build --platform linux/amd64 -t glue-venv-builder . docker run --platform linux/amd64 \ -v $(pwd)/base-requirements.txt:/working_dir/base-requirements.txt:ro \ -v $(pwd)/additional-requirements.txt:/working_dir/additional-requirements.txt:ro \ -v $(pwd)/my_glue_script/:/working_dir/my_glue_script/:ro \ -v $(pwd):/output \ -w /working_dir \ -it glue-venv-builder bash

Dieser Befehl mountet Ihre Anforderungsdateien und Ihr AWS Glue-Job-Skriptverzeichnis. Im folgenden Schritt wird das Skriptverzeichnis für die Importanalyse verwendet.

Schritt 4: Erstellen Sie ein temporäres Venv und entdecken Sie die erforderlichen Pakete

Erstellen Sie innerhalb des Containers ein temporäres Venv, das die AWS Glue-Laufzeit widerspiegelt. Verwenden Sie dann die statische Analyse, um die Mindestmenge an Paketen zu finden, die Ihr Job benötigt.

Führen AWS Sie für Glue 5.0 und 5.1, die Python 3.11 verwenden, die folgenden Befehle aus.

# Create a temporary venv to reproduce the AWS Glue runtime environment python3.11 -m venv temp_venv source temp_venv/bin/activate python3.11 -m pip install --upgrade pip # Install base container libraries (mirrors what the AWS Glue container provides) python3.11 -m pip install -r base-requirements.txt # Install additional Python modules on top (mirrors how AWS Glue installs them at runtime) python3.11 -m pip install -r additional-requirements.txt # Freeze the full resolved environment pip freeze > full-requirements.txt # Install analysis tools python3.11 -m pip install pipreqs pip-tools # Use pipreqs to discover what the script actually imports # --mode no-pin outputs package names without versions pipreqs --mode no-pin --savepath discovered-requirements.txt /working_dir/my_glue_script # Remove packages provided by the Spark runtime sed -i '/pyspark/d' discovered-requirements.txt sed -i '/py4j/d' discovered-requirements.txt # Remove awsglue - install AWSGlueDataplanePython in Step 5 instead sed -i '/awsglue/d' discovered-requirements.txt # Use pip-compile to resolve the full dependency tree of the discovered packages, # constrained to the versions from the temporary venv pip-compile discovered-requirements.txt -c full-requirements.txt -o final-requirements.txt echo "=== Final requirements.txt ===" cat final-requirements.txt # Deactivate and discard the temporary venv deactivate rm -rf temp_venv

Führen AWS Sie für Glue 6.0, das Python 3.13 verwendet, die folgenden Befehle aus.

# Create a temporary venv to reproduce the AWS Glue runtime environment python3.13 -m venv temp_venv source temp_venv/bin/activate python3.13 -m pip install --upgrade pip # Install base container libraries (mirrors what the AWS Glue container provides) python3.13 -m pip install -r base-requirements.txt # Install additional Python modules on top (mirrors how AWS Glue installs them at runtime) python3.13 -m pip install -r additional-requirements.txt # Freeze the full resolved environment pip freeze > full-requirements.txt # Install analysis tools python3.13 -m pip install pipreqs pip-tools # Use pipreqs to discover what the script actually imports # --mode no-pin outputs package names without versions pipreqs --mode no-pin --savepath discovered-requirements.txt /working_dir/my_glue_script # Remove packages provided by the Spark runtime sed -i '/pyspark/d' discovered-requirements.txt sed -i '/py4j/d' discovered-requirements.txt # Remove awsglue - install AWSGlueDataplanePython in Step 5 instead sed -i '/awsglue/d' discovered-requirements.txt # Use pip-compile to resolve the full dependency tree of the discovered packages, # constrained to the versions from the temporary venv pip-compile discovered-requirements.txt -c full-requirements.txt -o final-requirements.txt echo "=== Final requirements.txt ===" cat final-requirements.txt # Deactivate and discard the temporary venv deactivate rm -rf temp_venv
Anmerkung

Überprüfen final-requirements.txt Sie, ob es korrekt aussieht. Wenn Ihr Job dynamische Importe oder bedingte Importe verwendet, werden diese pipreqs möglicherweise nicht erkannt. Fügen Sie diese Pakete manuell zur Datei hinzu.

Schritt 5: Erstellen Sie das Produktions-Venv

Erstellen Sie das endgültige Venv nur mit den Paketen, die Ihr Job benötigt. Dann verpacke es als Tarball.

Führen AWS Sie für Glue 5.0 und 5.1, die Python 3.11 verwenden, die folgenden Befehle aus.

python3.11 -m venv pyspark_venv source pyspark_venv/bin/activate python3.11 -m pip install --upgrade pip python3.11 -m pip install -r final-requirements.txt # Install the AWS Glue Python library that matches your AWS Glue version (see the version # table in Step 1). Use 5.0.0 for AWS Glue 5.0, or 5.1.0 for AWS Glue 5.1. python3.11 -m pip install AWSGlueDataplanePython==5.0.0 python3.11 -m pip install venv-pack venv-pack -f -o pyspark_venv.tar.gz cp pyspark_venv.tar.gz /output/ exit

Führen AWS Sie für Glue 6.0, das Python 3.13 verwendet, die folgenden Befehle aus.

python3.13 -m venv pyspark_venv source pyspark_venv/bin/activate python3.13 -m pip install --upgrade pip python3.13 -m pip install -r final-requirements.txt # Install the AWS Glue Python library (see version table in Step 1) python3.13 -m pip install AWSGlueDataplanePython==6.0.0 python3.13 -m pip install venv-pack venv-pack -f -o pyspark_venv.tar.gz cp pyspark_venv.tar.gz /output/ exit

Schritt 6: Auf Amazon S3 hochladen

Laden Sie die gepackte virtuelle Umgebung in Ihren Amazon S3-Bucket hoch.

aws s3 cp pyspark_venv.tar.gz s3://amzn-s3-demo-bucket/path/pyspark_venv.tar.gz

Schritt 7: Jobparameter aktualisieren

Aktualisieren Sie Ihre AWS Glue-Jobkonfiguration, um sie --python-virtual-env stattdessen zu verwenden--additional-python-modules.

Entfernen Sie den --additional-python-modules Parameter und fügen Sie den --python-virtual-env Parameter hinzu, der auf Ihren hochgeladenen Tarball verweist.

# Before "--additional-python-modules": "cryptography" # After (remove --additional-python-modules entirely) "--python-virtual-env": "s3://amzn-s3-demo-bucket/path/pyspark_venv.tar.gz"

Automatisierung der Migration mit Kiro

Wenn Sie einen automatisierten Ansatz bevorzugen, können Sie den auf der Kiro Website verfügbaren Befehl verwenden Kiro, um die unter beschriebene Migration Erstellen Sie Ihre eigene virtuelle Umgebung von der Befehlszeile aus auszuführen. KiroAnalysiert mit etwas Kiro Geschick Ihre AWS Glue-Job-Konfiguration, erstellt die virtuelle Umgebung darin Docker und erstellt den gepackten Tarball.

Funktionsweise

Wenn Sie Kiro bitten, Ihren AWS Glue-Job von nach --additional-python-modules zu migrieren--python-virtual-env, geht Kiro wie folgt vor:

  1. Extrahiert die AWS Glue-Version, den Wert von --additional-python-modules und Ihr Job-Skript aus Ihrer Anfrage.

  2. Ruft die Liste der Basiscontainermodule für Ihre AWS Glue-Version aus der AWS Glue-Dokumentation ab.

  3. Erstellt die Build-Artefakte in einem Arbeitsverzeichnis, einschließlichbase-requirements.txt, additional-requirements.txtDockerfile, a und einem Build-Skript.

  4. Erstellt das Docker Image für eine AWS Glue-compatible Umgebung.

  5. Führt den Erkennungs- und Paketierungsworkflow in einem nicht interaktiven Container aus.

  6. Produziertpyspark_venv.tar.gz, fordert Sie zur Eingabe eines Amazon S3-Ziels auf und lädt den Tarball hoch.

  7. Zeigt Ihnen die aktualisierten Jobparameter an.

Beispielanforderung

Geben Sie Ihre AWS Glue-Version, Ihre zusätzlichen Python-Module und Ihr Job-Skript an. Beispiel:

I have a Glue 5.1 job with the following: --additional-python-modules: ephem, awscli Glue job script: import awscli import ephem Help me migrate to using --python-virtual-env.

Den Kiro-Skill erwerben

Die venv-migration Skill-Datei wird im aws-glue-libs Repository und nicht in diesem Handbuch verwaltet. Die Skill-Datei und Installationsanweisungen finden Sie unter venv-migration skill auf der GitHub Website.

Einschränkungen

  • Kiro Docker muss in der Befehlszeilenumgebung verfügbar sein.

  • Dynamische Importe und bedingte Importe, die in Ihrer Skriptquelle nicht sichtbar sind, werden nicht automatisch erkannt. Überprüfen Sie die generierte final-requirements.txt Datei und fügen Sie alle fehlenden Pakete manuell hinzu.

  • Wenn Ihr Job einen privaten Pip-Index mit verwendet--index-url, müssen Sie den Netzwerkzugriff auf diesen Index im Docker Container konfigurieren.

  • Pip-Konflikte während des Builds müssen möglicherweise manuell gelöst werden. Weitere Informationen finden Sie unter Fehlerbehebung.

Fehlerbehebung

Verwenden Sie die folgenden Abschnitte, um häufig auftretende Probleme bei der Verwendung virtueller Python-Umgebungen mit AWS Glue zu lösen.

Auflösen von Pip-Versionskonflikten

Ein Pip-Versionskonflikt bedeutet, dass zwei Pakete inkompatible Versionen derselben Abhängigkeit benötigen. Gehen Sie wie folgt vor, um den Konflikt zu finden und zu beheben:

  1. Lesen Sie die Pip-Fehlerausgabe. Wenn die Lösung völlig fehlschlägt, benennt die Ausgabe jede widersprüchliche Anforderung und das Paket, das sie eingeführt hat.

  2. Sehen Sie sich eine Vorschau an, was Pip lösen würde, ohne etwas zu installieren. Fügen --dry-run --report install-report.json Sie Ihrem Installationsbefehl wie im folgenden Beispiel hinzu.

    pip install -r additional-requirements.txt --dry-run --report install-report.json
  3. Inspiziereninstall-report.json. Der Bericht listet jedes Paket auf, das Pip ausgewählt hat, was unbemerkt Downgrades zeigt.

  4. Lockern Sie die Version-Pins für unkritische Pakete oder entfernen Sie die Einschränkungen.

Auflösen ModuleNotFoundError

Dieser Fehler weist darauf hin, dass Ihre virtuelle Umgebung kein erforderliches Paket enthält. Zu den häufigsten Ursachen gehören die folgenden:

  • Sie haben keine Basis-Container-Bibliothek hinzugefügt, die für Ihren Job erforderlich ist. Eine manuell erstellte virtuelle Umgebung erbt keine Pakete aus dem AWS Glue-Container.

  • Ihr Job verwendet einen dynamischen Import, der bei der statischen Analyse nicht erkannt werden pipreqs konnte.

  • Ihr Job erfordert eine PySpark Abhängigkeit von Executor-Knoten.

Um dieses Problem zu beheben, fügen Sie das fehlende Paket hinzu und erstellen Sie die virtuelle Umgebung neu. Die Schritte hängen davon ab, welchen Ansatz Ihr Job verwendet.

  • Manuell erstelltes Venv — Fügen Sie das Paket zu hinzufinal-requirements.txt, erstellen Sie dann die virtuelle Umgebung neu und laden Sie sie erneut hoch.

  • Service-generated venv — Füge das Paket zu hinzu. --additional-python-modules Die neue Modulliste ändert den Cache-Schlüssel, sodass AWS Glue bei der nächsten Jobausführung eine neue virtuelle Umgebung erstellt.

Reduzierung der Venv-Tarballgröße

Wenn Ihre virtuelle Paketumgebung zu groß ist, reduzieren Sie ihre Größe mit den folgenden Ansätzen:

  • Entfernen Sie unnötige Pakete, die Ihr Skript nicht importiert, z. B. Testframeworks und Entwicklungstools.

  • Verwenden Sie es pip install --no-deps für Pakete, bei denen Sie transitive Abhängigkeiten manuell steuern möchten.

  • Schließen Sie nur die Pakete ein, die Ihr Skript direkt importiert, und lassen Sie uns die minimal erforderlichen transitiven Abhängigkeiten pip-compile lösen.

Behebung von Plattformkompatibilitätsfehlern

Diese Fehler treten auf, wenn Pakete im Venv für ein anderes Betriebssystem oder eine andere Architektur erstellt wurden. Um diese Fehler zu vermeiden:

  • Erstellen Sie die virtuelle Umgebung immer in einem Docker Container mit dem --platform linux/amd64 Flag.

  • Stellen Sie sicher, dass die Wheel-Plattform-Tags Ihrer AWS Glue-Zielversion entsprechen. Zum Beispiel benötigen AWS Glue 5.0 und 5.1 manylinux2014_x86_64 oder kompatible Plattform-Tags.

  • Erstellen Sie die virtuelle Umgebung nicht direkt auf macOS oder Windows ohneDocker.