

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Usare le librerie Python con AWS Aderenza
<a name="aws-glue-programming-python-libraries"></a>

 È possibile installare moduli e librerie Python aggiuntivi da utilizzare con AWS Glue ETL. Per AWS Glue 2.0 e versioni successive, AWS Glue utilizza Python Package Installer (pip3) per installare moduli aggiuntivi utilizzati da Glue ETL. AWS AWS Glue offre diverse opzioni per portare i moduli Python aggiuntivi nell'ambiente di lavoro Glue. AWS Puoi usare il `--additional-python-modules` parametro per inserire nuovi moduli usando file zip contenenti le ruote Python in bundle (note anche come «zip of wheels», disponibili per AWS Glue 5.0 e versioni successive), singoli file di ruote Python, file dei requisiti (requirements.txt, disponibile per AWS Glue 5.0 e versioni successive) o un elenco di moduli Python separati da virgole. Potrebbe anche essere usato per cambiare la versione dei moduli Python forniti nell'ambiente AWS Glue (vedi per maggiori dettagli). [Moduli Python già forniti in AWS Aderenza](#glue-modules-provided) 

 Per AWS Glue 5.0 e versioni successive, il modo consigliato per installare i moduli Python è eseguire il lavoro in un ambiente virtuale Python (venv). Per ulteriori informazioni, consulta [(Consigliato) Usare un ambiente virtuale Python in AWS Glue 5.0 o versioni successive](#glue-python-library-virtual-environments). 

**Topics**
+ [(Consigliato) Usare un ambiente virtuale Python in AWS Glue 5.0 o versioni successive](#glue-python-library-virtual-environments)
+ [Installazione di moduli Python aggiuntivi con pip in AWS Glue 2.0 o successivo](#addl-python-modules-support)
+ [Inclusi file Python con funzionalità native PySpark](#extra-py-files-support)
+ [Script di programmazione che utilizzano trasformazioni visive](#aws-glue-programming-with-cvt)
+ [Compressione delle librerie per l'inclusione](#aws-glue-programming-python-libraries-zipping)
+ [Caricamento delle librerie Python in AWS Taccuini Glue Studio](#aws-glue-programming-python-libraries-notebooks)
+ [Caricamento delle librerie Python in un endpoint di sviluppo in AWS Colla 0. 9/10.](#aws-glue-programming-python-libraries-dev-endpoint)
+ [Usare le librerie Python in un lavoro o JobRun](#aws-glue-programming-python-libraries-job)
+ [Analizza in modo proattivo le dipendenze di Python](#aws-glue-programming-analyzing-python-dependencies)
+ [Moduli Python già forniti in AWS Aderenza](#glue-modules-provided)
+ [Appendice A: Creazione di un artefatto con Zip of Wheels](#glue-python-library-zip-of-wheels-appendix)
+ [Appendice B: AWS Dettagli sull'ambiente di incollaggio](#glue-python-libraries-environment-details)

## (Consigliato) Usare un ambiente virtuale Python in AWS Glue 5.0 o versioni successive
<a name="glue-python-library-virtual-environments"></a>

Per AWS Glue 5.0 e versioni successive, eseguire il lavoro all'interno di un ambiente virtuale Python (venv) è il modo consigliato per installare i moduli Python. Usa un ambiente virtuale per nuovi lavori e valuta la possibilità di spostare i lavori esistenti in uno solo.

`--additional-python-modules`Da solo, pip risolve le tue dipendenze ad ogni esecuzione di PyPI lavoro, quindi una nuova versione upstream può cambiare ciò che il processo installa. Un ambiente virtuale li risolve una volta e riutilizza il risultato, quindi le esecuzioni successive installano le stesse versioni. AWS Glue supporta due modi per utilizzarne una e differiscono nel momento in cui viene raggiunta tale risoluzione e nei parametri impostati:
+ **Service-generated ambiente virtuale**: disponibile in AWS Glue 6.0 e versioni successive. Si aggiunge il `--python-virtual-env-storage-prefix` parametro e si mantiene il `--additional-python-modules` valore esistente. AWS Glue risolve i moduli alla prima esecuzione del processo, memorizza nella cache l'ambiente virtuale in Amazon S3 e lo riutilizza nelle esecuzioni successive, quindi non è richiesta alcuna build locale. Poiché AWS Glue lo crea con`--system-site-packages`, l'ambiente virtuale eredita i moduli già presenti nell'ambiente di base.
+ **Ambiente virtuale creato manualmente**: disponibile in AWS Glue 5.0 e versioni successive. Crei l'ambiente virtuale sul tuo computer locale o in una CI/CD pipeline, lo carichi su Amazon S3 e lo fai riferimento con il `--python-virtual-env` parametro. Le dipendenze vengono risolte in fase di compilazione, prima dell'esecuzione di qualsiasi processo. Questo ti dà il massimo controllo ed è l'approccio da utilizzare per alberi di dipendenze complessi o quando la build viene eseguita in una pipeline.

**Importante**  
I due approcci differiscono nel fatto che il tuo lavoro abbia ancora accesso ai moduli elencati in: [Moduli Python già forniti in AWS Aderenza](#glue-modules-provided)  
Un ambiente ** virtuale creato ** manualmente sostituisce completamente l'ambiente Python e non eredita nessuno di questi moduli. È necessario includere tutti i pacchetti necessari al lavoro, inclusi i pacchetti precedentemente disponibili nell'ambiente di base comeboto3, numpy e. pandas
Un ambiente ** virtuale ** generato dai servizi eredita tali moduli, quindi questo requisito non si applica.

Per un confronto tra i due approcci, le fasi di migrazione per i job attualmente utilizzati e le linee guida per la risoluzione dei problemi`--additional-python-modules`, consulta. [Utilizzo di ambienti virtuali Python con AWS Aderenza](aws-glue-programming-python-virtual-environments.md)

## Installazione di moduli Python aggiuntivi con pip in AWS Glue 2.0 o successivo
<a name="addl-python-modules-support"></a>

AWS Glue utilizza Python Package Installer (pip3) per installare moduli aggiuntivi da utilizzare da Glue ETL. AWS Puoi utilizzare il parametro `--additional-python-modules` con un elenco di moduli Python separati da virgole per aggiungere un nuovo modulo o modificare la versione di un modulo esistente. Puoi installare gli artefatti della ruota incorporata tramite una zip of wheels o un artefatto a sé stante caricando il file su Amazon S3, quindi includendo il percorso dell'oggetto Amazon S3 nell'elenco di moduli. Per ulteriori informazioni sull'impostazione dei parametri dei job, consulta Using job parameters in Glue jobs. [AWS](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html)

 Puoi passare opzioni aggiuntive a pip3 tramite il parametro `--python-modules-installer-option`. Ad esempio, potresti `--only-binary` forzare pip a installare solo artefatti precompilati per i pacchetti specificati da. `--additional-python-modules` Per altri esempi, vedi [ Creare moduli Python da una ruota per carichi di lavoro Spark ETL usando Glue 2.0. AWS](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/) 

### Le migliori pratiche per la gestione delle dipendenze in Python
<a name="glue-python-library-best-practices"></a>

Per AWS Glue 5.0 e versioni successive, AWS Glue consiglia di eseguire il lavoro in un ambiente virtuale Python (venv). Invece di risolvere le dipendenze ad ogni esecuzione di PyPI un lavoro, un ambiente virtuale le risolve una volta e riutilizza il risultato, in modo che le esecuzioni successive installino le stesse versioni. Per ulteriori informazioni, consulta [(Consigliato) Usare un ambiente virtuale Python in AWS Glue 5.0 o versioni successive](#glue-python-library-virtual-environments).

Se lo utilizzate `--additional-python-modules` per un carico di lavoro di produzione, impacchettate tutte le dipendenze Python come file wheel in un unico file zip. Rispetto alle altre `--additional-python-modules` forme, questo fornisce:
+ **Esecuzione deterministica**: controllo esatto sulle versioni dei pacchetti installate
+ **Affidabilità**: nessuna dipendenza da repository di pacchetti esterni durante l'esecuzione del processo
+ **Prestazioni**: singola operazione di download anziché più chiamate di rete
+ **Installazione offline**: funziona in ambienti VPC privati senza accesso a Internet

#### Considerazioni importanti
<a name="glue-python-library-important-considerations"></a>

Secondo il modello di responsabilità [AWS condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/), sei responsabile della gestione di moduli Python aggiuntivi, librerie e delle loro dipendenze. Questo include:
+ **Aggiornamenti di sicurezza**: aggiornamento regolare dei pacchetti per risolvere le vulnerabilità di sicurezza
+ **Compatibilità delle versioni**: assicurati che i pacchetti siano compatibili con la tua versione di AWS Glue
+ **Test**: verifica del corretto funzionamento delle dipendenze impacchettate nell'ambiente Glue

Se hai dipendenze minime, puoi prendere in considerazione l'utilizzo di singoli file wheel.

Le sezioni seguenti descrivono i modi per specificare i moduli con`--additional-python-modules`. Per AWS Glue 5.0 e versioni successive, considera [(Consigliato) Usare un ambiente virtuale Python in AWS Glue 5.0 o versioni successive](#glue-python-library-virtual-environments) invece.

### Installazione di librerie Python aggiuntive in AWS Incolla 5.0 o versioni successive usando Zip of Wheels
<a name="glue-python-library-installing-zip-of-wheels"></a>

AWS Glue 5.0 e versioni successive supporta il raggruppamento di più file wheel in un unico artefatto zip contenente ruote Python raggruppate per una gestione delle dipendenze più affidabile e deterministica. Per utilizzare questo approccio, crea un file zip contenente tutte le dipendenze delle ruote e le relative dipendenze transitive con il `.gluewheels.zip` suffisso, caricalo su Amazon S3 e fai riferimento ad esso utilizzando il parametro. `--additional-python-modules` Assicurati di `--no-index` aggiungerlo al parametro job. `--python-modules-installer-option` Con questa configurazione, il file zip of wheels funge essenzialmente da indice locale da cui pip può risolvere le dipendenze in fase di esecuzione. Ciò elimina le dipendenze da repository di pacchetti esterni come PyPI durante l'esecuzione del lavoro, fornendo maggiore stabilità e coerenza per i carichi di lavoro di produzione. Ad esempio: 

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/zip-of-wheels-1.0.0.gluewheels.zip
--python-modules-installer-option --no-index
```

Per istruzioni su come creare un file zip of wheels, consulta. [Appendice A: Creazione di un artefatto con Zip of Wheels](#glue-python-library-zip-of-wheels-appendix)

### Installazione di librerie Python aggiuntive utilizzando Wheel
<a name="glue-python-library-installing-wheel"></a>

AWS Glue supporta l'installazione di pacchetti Python personalizzati utilizzando file wheel (.whl) archiviati in Amazon S3. Per includere i file wheel nei tuoi job di AWS Glue, fornisci al parametro job un elenco separato da virgole dei file wheel memorizzati in s3. `--additional-python-modules` Ad esempio: 

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/package-1.0.0-py3-none-any.whl,s3://your-bucket/path/to/another-package-2.1.0-cp311-cp311-linux_x86_64.whl
```

Questo approccio supporta anche le casistiche in cui sono necessarie distribuzioni personalizzate o pacchetti con dipendenze native precompilati per il sistema operativo corretto. Per altri esempi, vedi [ Creare moduli Python da una ruota per carichi di lavoro Spark ETL usando Glue 2.0. AWS](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/) 

### Installazione di librerie Python aggiuntive in AWS Incolla 5.0 o versioni successive usando requirements.txt
<a name="addl-python-modules-requirements-txt"></a>

In AWS Glue 5.0\+, puoi fornire lo standard di fatto per gestire le dipendenze delle librerie Python`requirements.txt`. A tale scopo, fornire i seguenti due parametri di lavoro:
+ Chiave: `--python-modules-installer-option`

  Valore: `-r`
+ Chiave: `--additional-python-modules`

  Valore: `s3://path_to_requirements.txt`

AWS I nodi Glue 5.0 caricano inizialmente le librerie Python specificate in. `requirements.txt`

Segue un file di esempio requirements.txt:

```
awswrangler==3.9.1
elasticsearch==8.15.1
PyAthena==3.9.0
PyMySQL==1.1.1
PyYAML==6.0.2
pyodbc==5.2.0
pyorc==0.9.0
redshift-connector==2.1.3
scipy==1.14.1
scikit-learn==1.5.2
SQLAlchemy==2.0.36
```

**Importante**  
Usa questa opzione con cautela, specialmente nei carichi di lavoro di produzione. Estrarre le dipendenze da PyPI in fase di esecuzione è altamente rischioso perché non si può essere sicuri in quale artefatto si risolva pip. L'uso di versioni di librerie non bloccate è particolarmente rischioso poiché richiama l'ultima versione dei moduli python, che possono introdurre modifiche sostanziali o introdurre moduli python incompatibili. Ciò potrebbe causare un fallimento del lavoro a causa dell'errore di installazione di Python nell'ambiente di lavoro Glue. AWS Sebbene il blocco della versione della libreria aumenti la stabilità, la risoluzione dei pip non è ancora completamente deterministica, quindi possono sorgere problemi simili. Come best practice, AWS Glue consiglia di utilizzare artefatti congelati, come zip of wheels o singole lime su ruote (vedi [Installazione di librerie Python aggiuntive in AWS Incolla 5.0 o versioni successive usando Zip of Wheels](#glue-python-library-installing-zip-of-wheels) per maggiori dettagli). 

**Importante**  
Se non aggiungi le versioni delle tue dipendenze transitive, una dipendenza primaria potrebbe generare versioni di dipendenze transitive incompatibili. Come best practice, tutte le versioni della libreria dovrebbero essere bloccate per una maggiore coerenza nei lavori di Glue. AWS Ancora meglio, AWS Glue consiglia di raggruppare le dipendenze in un file zip of wheels per garantire la massima coerenza e affidabilità per i carichi di lavoro di produzione. 

### Installazione di librerie Python aggiuntive configurando direttamente come elenco separato da virgole
<a name="glue-python-library-installing-comma-separated-list"></a>

Per aggiornare o aggiungere un nuovo modulo Python, AWS Glue consente di passare `--additional-python-modules` parametri con un elenco di moduli Python separati da virgole come valori. Ad esempio per aggiornare/aggiungere il modulo scikit-learn usa quanto segue:. key/value `"--additional-python-modules", "scikit-learn==0.21.3"` Sono disponibili due opzioni per configurare direttamente i moduli Python.
+ **Modulo Python bloccato **

  `"--additional-python-modules", "scikit-learn==0.21.3,ephem==4.1.6"`
+ **Modulo Python non bloccato: (non consigliato per carichi di lavoro di produzione)**

  `"--additional-python-modules", "scikit-learn>==0.20.0,ephem>=4.0.0"`

  O

  `"--additional-python-modules", "scikit-learn,ephem"`

**Importante**  
Usa questa opzione con cautela, specialmente nei carichi di lavoro di produzione. Estrarre le dipendenze da PyPI in fase di esecuzione è altamente rischioso perché non si può essere sicuri in quale artefatto si risolva pip. L'uso di versioni di librerie non bloccate è particolarmente rischioso poiché richiama l'ultima versione dei moduli python, che possono introdurre modifiche sostanziali o introdurre moduli python incompatibili. Ciò potrebbe causare un fallimento del lavoro a causa dell'errore di installazione di Python nell'ambiente di lavoro Glue. AWS Sebbene il blocco della versione della libreria aumenti la stabilità, la risoluzione dei pip non è ancora completamente deterministica, quindi possono sorgere problemi simili. Come best practice, AWS Glue consiglia di utilizzare artefatti congelati, come zip of wheels o singole lime su ruote (vedi [Installazione di librerie Python aggiuntive in AWS Incolla 5.0 o versioni successive usando Zip of Wheels](#glue-python-library-installing-zip-of-wheels) per maggiori dettagli).

**Importante**  
Se non aggiungi le versioni delle tue dipendenze transitive, una dipendenza primaria potrebbe generare versioni di dipendenze transitive incompatibili. Come best practice, tutte le versioni della libreria dovrebbero essere bloccate per una maggiore coerenza nei lavori di Glue. AWS Ancora meglio, AWS Glue consiglia di raggruppare le dipendenze in un file zip of wheels per garantire la massima coerenza e affidabilità per i carichi di lavoro di produzione. 

## Inclusi file Python con funzionalità native PySpark
<a name="extra-py-files-support"></a>

AWS Glue utilizza PySpark per includere file Python nei lavori ETL di AWS Glue. Quando possibile, ti consigliamo di usare `--additional-python-modules` per gestire le dipendenze. Puoi utilizzare il parametro del processo `--extra-py-files` per includere i file Python. Le dipendenze devono essere ospitate in Amazon S3 e il valore dell'argomento deve essere un elenco delimitato da virgole di percorsi Amazon S3 senza spazi. Questa funzionalità si comporta come la gestione delle dipendenze Python che useresti con Spark. Per ulteriori informazioni sulla gestione delle dipendenze di Python in Spark, consulta la [ pagina ](https://spark.apache.org/docs/latest/api/python/tutorial/python_packaging.html#using-pyspark-native-features) Using PySpark Native Features nella documentazione di Apache Spark. `--extra-py-files`è utile nei casi in cui il codice aggiuntivo non è impacchettato o quando si sta migrando un programma Spark con una toolchain esistente per la gestione delle dipendenze. Affinché gli strumenti di dipendenza siano gestibili, sarà necessario raggruppare le dipendenze prima di inviarle. 

## Script di programmazione che utilizzano trasformazioni visive
<a name="aws-glue-programming-with-cvt"></a>

 Quando crei un job AWS Glue utilizzando l'interfaccia visiva di AWS Glue Studio, puoi trasformare i tuoi dati con nodi di trasformazione dei dati gestiti e trasformazioni visive personalizzate. Per ulteriori informazioni sui nodi di trasformazione dei dati, consultare [Trasformare i dati con AWS Glue trasformazioni gestite](edit-jobs-transforms.md). Per ulteriori informazioni sulle trasformazioni visive, consultare [Trasforma i dati con le trasformazioni visive personalizzate](custom-visual-transform.md). Gli script che utilizzano le trasformazioni visive possono essere generati solo quando il **linguaggio** del processo è impostato per utilizzare Python.

 Quando si genera un lavoro AWS Glue utilizzando trasformazioni visive, AWS Glue Studio includerà queste trasformazioni nell'ambiente di runtime utilizzando il `--extra-py-files` parametro nella configurazione del lavoro. Per ulteriori informazioni sui parametri di processo, consulta [Utilizzo dei parametri del lavoro in AWS Glue jobs](aws-glue-programming-etl-glue-arguments.md). Quando a si apportano modifiche a uno script o a un ambiente di runtime generato, è necessario mantenere questa configurazione del lavoro affinché lo script venga eseguito correttamente.

## Compressione delle librerie per l'inclusione
<a name="aws-glue-programming-python-libraries-zipping"></a>

A meno che una libreria non sia contenuta in un singolo file `.py`, deve essere compressa in un archivio `.zip`. La directory del pacchetto deve trovarsi al livello radice dell'archivio e deve contenere un file `__init__.py` per il pacchetto. Python sarà in grado di importare il pacchetto nel modo normale.

Se la tua libreria è composta da un singolo modulo Python in un file `.py`, non è necessario trasferirla in un file `.zip`.

## Caricamento delle librerie Python in AWS Taccuini Glue Studio
<a name="aws-glue-programming-python-libraries-notebooks"></a>

 Per specificare le librerie Python nei notebook AWS Glue Studio, vedi Installazione di moduli Python aggiuntivi. [https://docs.aws.amazon.com/glue/latest/dg/manage-notebook-sessions.html#specify-default-modules](https://docs.aws.amazon.com/glue/latest/dg/manage-notebook-sessions.html#specify-default-modules) 

## Caricamento delle librerie Python in un endpoint di sviluppo in AWS Colla 0. 9/10.
<a name="aws-glue-programming-python-libraries-dev-endpoint"></a>

Se utilizzi diversi set di librerie per diversi script ETL, puoi impostare un endpoint di sviluppo separato per ciascun set oppure sovrascrivere i file `.zip` della libreria che l'endpoint di sviluppo carica ogni volta che si cambia script.

Puoi utilizzare la console per specificare uno o più file .zip di libreria per un endpoint di sviluppo al momento della creazione. Dopo l'assegnazione di un nome e un ruolo IAM, scegli **Script Libraries and job parameters (optional)** (Librerie di Script e parametri di processo -opzionale) e immetti il percorso Amazon S3 completo per i tuoi file `.zip` della libreria nella casella **Python library path** (Percorso libreria Python). Ad esempio:

```
s3://{{bucket}}/{{prefix/}}site-packages.zip
```

Se lo desideri, puoi specificare più percorsi completi per i file, separandoli con virgole ma non spazi, in questo modo:

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

Se aggiorni questi file `.zip` in un secondo momento, puoi utilizzare la console per importarli nuovamente nell'endpoint di sviluppo. Individua l'endpoint dello sviluppatore in questione, verifica la casella a esso corrispondente e scegli **Update ETL libraries** (Aggiorna librerie ETL) dal menu **Action** (Operazione).

In modo simile, puoi specificare i file di libreria utilizzando le API AWS Glue. Quando crei un endpoint di sviluppo chiamando [CreateDevEndpoint azione (Python: create\_dev\_endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-CreateDevEndpoint), puoi specificare uno o più percorsi completi per le librerie nel parametro `ExtraPythonLibsS3Path` in una chiamata come la seguente:

```
dep = glue.create_dev_endpoint(
             EndpointName="{{testDevEndpoint}}",
             RoleArn="{{arn:aws:iam::123456789012}}",
             SecurityGroupIds="{{sg-7f5ad1ff}}",
             SubnetId="{{subnet-c12fdba4}}",
             PublicKey="{{ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...}}",
             NumberOfNodes={{3}},
             ExtraPythonLibsS3Path="{{s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip}}")
```

Quando aggiorni un endpoint di sviluppo, puoi anche aggiornare le librerie caricate utilizzando un oggetto [DevEndpointCustomLibraries](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-DevEndpointCustomLibraries) e impostare il parametro `UpdateEtlLibraries ` su `True` durante la chiamata [UpdateDevEndpoint (update\_dev\_endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-UpdateDevEndpoint).

## Usare le librerie Python in un lavoro o JobRun
<a name="aws-glue-programming-python-libraries-job"></a>

Quando si crea un nuovo processo nella console, è possibile specificare uno o più file ZIP di libreria scegliendo **Script Libraries and job parameters (optional)** (Librerie di script e parametri di processo - opzionale) e immettendo percorsi di librerie Amazon S3 completi, analogamente a come si farebbe quando si crea un endpoint di sviluppo:

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

Se si sta chiamando [CreateJob (create\_job)](aws-glue-api-jobs-job.md#aws-glue-api-jobs-job-CreateJob), è possibile specificare uno o più percorsi completi alle librerie predefinite utilizzando il parametro predefinito `--extra-py-files`, come segue:

```
job = glue.create_job(Name='{{sampleJob}}',
                      Role='{{Glue_DefaultRole}}',
                      Command={'Name': 'glueetl',
                               'ScriptLocation': '{{s3://my_script_bucket/scripts/my_etl_script.py}}'},
                      DefaultArguments={'--extra-py-files': '{{s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip}}'})
```

Quindi, quando si avvia una JobRun, è possibile sovrascrivere l'impostazione predefinita della libreria con una diversa:

```
runId = glue.start_job_run(JobName='{{sampleJob}}',
                           Arguments={'--extra-py-files': '{{s3://bucket/prefix/lib_B.zip}}'})
```

## Analizza in modo proattivo le dipendenze di Python
<a name="aws-glue-programming-analyzing-python-dependencies"></a>

 Per identificare in modo proattivo i potenziali problemi di dipendenza prima della distribuzione su AWS Glue, puoi utilizzare lo strumento di analisi delle dipendenze per convalidare i tuoi pacchetti Python rispetto all'ambiente Glue di destinazione. AWS 

 AWS fornisce uno strumento di analisi delle dipendenze Python open source progettato specificamente per gli ambienti Glue. AWS Questo strumento è disponibile nel repository degli esempi di AWS Glue e può essere utilizzato localmente per convalidare le dipendenze prima della distribuzione. 

 Questa analisi aiuta a garantire che le dipendenze seguano la pratica consigliata del pinning di tutte le versioni della libreria per implementazioni di produzione coerenti. Per maggiori dettagli, consultare la sezione [README](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/glue_python_dependency_analyzer) dello strumento. 

### Utilizzo di AWS Glue Dependency Analyzer
<a name="w2aac67c11c14c18c43c11b1"></a>

 AWS Glue Python Dependency Analyzer aiuta a identificare le dipendenze non bloccate e i conflitti di versione simulando l'installazione di pip con vincoli specifici della piattaforma che corrispondono all'ambiente Glue di destinazione. AWS 

```
# Analyze a single Glue job
python glue_dependency_analyzer.py -j my-glue-job

# Analyze multiple jobs with specific AWS configuration
python glue_dependency_analyzer.py -j job1 -j job2 --aws-profile production --aws-region us-west-2
```

 Lo strumento contrassegnerà: 
+  Dipendenze non bloccate che potrebbero installare versioni diverse tra le esecuzioni dei processi 
+  Conflitti delle versioni tra pacchetti 
+  Dipendenze AWS non disponibili per l'ambiente Glue di destinazione 

## Analizzare e correggere gli errori nei processi dovuti alle dipendenze di Python con Amazon Q Developer
<a name="aws-glue-programming-analyze-job-failures-with-amazon-q"></a>

 Amazon Q Developer è un assistente conversazionale basato sull'intelligenza artificiale generativa (AI) che può aiutarti a comprendere, creare, estendere e gestire le applicazioni. AWS È possibile scaricarlo seguendo le istruzioni nella Guida alle nozioni di base per Amazon Q. 

 Amazon Q Developer può essere usato per analizzare e correggere gli errori nei processi dovuti alle dipendenze Python. Ti consigliamo di utilizzare il seguente prompt sostituendo il segnaposto job < Job-Name > con il nome del tuo glue job. 

```
I have an AWS Glue job named <Job-Name> that has failed due to Python module installation conflicts. Please assist in diagnosing and resolving this issue using the following systematic approach. Proceed once sufficient information is available.

Objective: Implement a fix that addresses the root cause module while minimizing disruption to the existing working environment.

Step 1: Root Cause Analysis
• Retrieve the most recent failed job run ID for the specified Glue job
• Extract error logs from CloudWatch Logs using the job run ID as a log stream prefix
• Analyze the logs to identify:
  • The recently added or modified Python module that triggered the dependency conflict
  • The specific dependency chain causing the installation failure
  • Version compatibility conflicts between required and existing modules

Step 2: Baseline Configuration Identification
• Locate the last successful job run ID prior to the dependency failure
• Document the Python module versions that were functioning correctly in that baseline run
• Establish the compatible version constraints for conflicting dependencies

Step 3: Targeted Resolution Implementation
• Apply pinning by updating the job's additional_python_modules parameter
• Pin only the root cause module and its directly conflicting dependencies to compatible versions, and do not remove python modules unless necessary
• Preserve flexibility for non-conflicting modules by avoiding unnecessary version constraints
• Deploy the configuration changes with minimal changes to the existing configuration and execute a validation test run. Do not change the Glue versions.

Implementation Example:
Scenario: Recently added pandas==2.0.0 to additional_python_modules
Error: numpy version conflict (pandas 2.0.0 requires numpy>=1.21, but existing job code requires numpy<1.20)
Resolution: Update additional_python_modules to "pandas==1.5.3,numpy==1.19.5"
Rationale: Use pandas 1.5.3 (compatible with numpy 1.19.5) and pin numpy to last known working version

Expected Outcome: Restore job functionality with minimal configuration changes while maintaining system stability.
```

 Il prompt indica a Q di: 

1. Recuperare l'ultimo ID di esecuzione dei processi non riuscito

1. Trovare i log associati e i dettagli

1. Trovare le esecuzioni dei processi riuscite per rilevare eventuali pacchetti Python modificati

1. Apportare eventuali correzioni alla configurazione e avviare un'altra esecuzione di test

## Moduli Python già forniti in AWS Aderenza
<a name="glue-modules-provided"></a>

È possibile modificare la versione dei moduli disponibili con il parametro di processo `--additional-python-modules`.

------
#### [ AWS Glue version 6.0 ]

AWS La versione 6.0 di Glue include i seguenti moduli Python pronti all'uso:
+ aiobotocore==3.4.0
+ bulbi oculari aiohappye==2.6.1
+ aiohttp=3.13.5
+ aioitertools=0.13.0
+ segnale aio==1.4.0
+ appdirs==1.4.4
+ attrs=26.1.0
+ avvio 3=1.42.84
+ botocore=1.42.84
+ certificazione==2026.2.25
+ charset-normalizer==3.4.7
+ coreografo==1.2.1
+ contorni==1.3.3
+ ciclo=0.12.1
+ distlib==0.4.0
+ blocco di file==3.25.2
+ strumenti per i caratteri ==4.62.1
+ lista bloccata ==1.8.0
+ fsspec=2026.3.0
+ googleapis-common-protos==1.75.0
+ stato grpcio ==1.81.0
+ grpcio=1.81.0
+ idna=3.11
+ iniconfig==2.3.0
+ jmespath=1.1.0
+ caleido=1.2.0
+ kiwi vers=1.5.0
+ logistro=2.0.1
+ matplotlib=3.10.8
+ multidict=6.7.1
+ narvali==2.19.0
+ numero==2.4.4
+ o json==3.11.8
+ imballaggio=26.0
+ panda ==2.3.3
+ cuscino=12.2.0
+ pip=24.0
+ dischi della piattaforma ==4.9.6
+ trama=6.7.0
+ pluggy=1.6.0
+ propcache=0.4.1
+ protobuf=7.35.0
+ pyarrow=23.0.1
+ Pigmenti==2.20.0
+ pyparsing==3.3.2
+ pytest-timeout==2.4.0
+ pytest==9.0.3
+ python-dateutil==2.9.0.post0
+ scoperta di python-==1.2.2
+ pytz=2026.1.post1
+ pyYAML=6.0.3
+ richieste==2.33.1
+ s3fs=2026.3.0
+ trasferimento s3==0.16.0
+ seaborn==0.13.2
+ strumenti di configurazione ==79.0.1
+ json semplice==3.20.2
+ sei=1.17.0
+ tenacia==9.1.2
+ typing\_extensions==4.15.0
+ tzdata==2026.1
+ urllib3==2.6.3
+ uv== 0.11.6
+ ambiente virtuale ==21.2.1
+ involucro ==2.1.2
+ filo=1.23.0
+ standard=0.25.0

------
#### [ AWS Glue version 5.1 ]

AWS La versione 5.1 di Glue include i seguenti moduli Python pronti all'uso:
+ aiobotocore==2.25.1
+ bulbi oculari aiohappye==2.6.1
+ aiohttp=3.13.2
+ aioitertools=0.12.0
+ segnale aio==1.4.0
+ appdirs==1.4.4
+ attrs=25.4.0
+ avvio 3==1.40.61
+ botocore=1.40.61
+ certificazione==2025.10.5
+ charset-normalizer==3.4.4
+ coreografo==1.2.0
+ contorni==1.3.3
+ ciclo=0.12.1
+ distlib==0.4.0
+ blocco di file==3.20.0
+ strumenti per i caratteri ==4.60.1
+ lista bloccata ==1.8.0
+ fsspec=2025.10.0
+ idna==3.11
+ iniconfig==2.3.0
+ jmespath=1.0.1
+ caleido==1.2.0
+ kiwi vers=1.4.9
+ logistro=2.0.1
+ matplotlib=3.10.7
+ multidict=6.7.0
+ narvali==2.10.2
+ numero=2.3.4
+ o json==3.11.4
+ imballaggio=25.0
+ panda ==2.3.3
+ cuscino=12.0.0
+ pip=24.0
+ dischi della piattaforma ==4.5.0
+ trama=6.4.0
+ pluggy=1.6.0
+ propcache=0.4.1
+ pyarrow=22.0.0
+ Pigmenti==2.19.2
+ pyparsing==3.2.5
+ pytest-timeout==2.4.0
+ pytest==8.4.2
+ python-dateutil==2.9.0.post0
+ pytz=2025.2
+ richieste==2.32.5
+ s3fs==2025.10.0
+ trasferimento s3==0.14.0
+ seaborn==0.13.2
+ strumenti di configurazione ==79.0.1
+ json semplice==3.20.2
+ sei=1.17.0
+ tenacia==9.1.2
+ typing\_extensions==4.15.0
+ tzdata==2025.2
+ urllib3==2.5.0
+ uv== 0.9.7
+ ambiente virtuale ==20.35.4
+ involucro ==1.17.3
+ filo=1.22.0

------
#### [ AWS Glue version 5.0 ]

AWS La versione 5.0 di Glue include i seguenti moduli Python pronti all'uso:
+ aiobotocore==2.13.1
+ aiohappyeyeballs==2.3.5
+ aiohttp=3.10.1
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ appdirs==1.4.4
+ attrs=24.2.0
+ avvio 3==1.34.131
+ botocore=1.34.131
+ certificazione==2024.7.4
+ charset-normalizer==3.3.2
+ contourpy==1.2.1
+ ciclo==0.12.1
+ fonttools==4.53.1
+ elenco congelato ==1.4.1
+ fspec=2024.6.1
+ idna==2.10
+ jmespath==0.10.0
+ kaleido==0.2.1
+ kiwi vers=1.4.5
+ matplotlib=3.9.0
+ multidict=6.0.5
+ numero=1.26.4
+ imballaggio=24.1
+ panda ==2.2.2
+ cuscino=10.4.0
+ pip==23.0.1
+ plotly==5.23.0
+ pyarrow=17.0.0
+ pyparsing==3.1.2
+ python-dateutil==2.9.0.post0
+ pytz=2024.1
+ richieste==2.32.2
+ s3fs=2024.6.1
+ trasferimento s3==0.10.2
+ seaborn==0.13.2
+ strumenti di configurazione==59.6.0
+ six==1.16.0
+ tenacity==9.0.0
+ tzdata==2024.1
+ urllib3==1.25.10
+ virtualenv==20.4.0
+ involucro ==1.16.0
+ filo==1.9.4

------
#### [ AWS Glue version 4.0 ]

AWS La versione 4.0 di Glue include i seguenti moduli Python pronti all'uso:
+ aiobotocore==2.4.1
+ aiohttp==3.8.3
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ async-timeout==4.0.2
+ asynctest==0.13.0
+ attrs==22.2.0
+ avro-python3==1.10.2
+ boto3==1.24.70
+ botocore==1.27.59
+ certifi==2021.5.30
+ chardet==3.0.4
+ charset-normalizer==2.1.1
+ click==8.1.3
+ cycler==0.10.0
+ Cython==0.29.32
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata==5.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kaleido==0.2.1
+ kiwisolver==1.4.4
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidict==6.0.4
+ nltk==3.7
+ numpy==1.23.5
+ packaging==23.0
+ pandas == 1.5.1
+ patsy==0.5.1
+ Pillow==9.4.0
+ pip==23.0.1
+ plotly==5.16.0
+ pmdarima==2.0.1
+ ptvsd==4.3.2
+ pyarrow==10.0.0
+ pydevd==2.5.0
+ pyhocon==0.3.58
+ PyMySQL==1.0.2
+ pyparsing==2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ PyYAML==6.0.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2022.11.0
+ s3transfer==0.6.0
+ scikit-learn==1.1.3
+ scipy==1.9.3
+ setuptools==49.1.3
+ six==1.16.0
+ statsmodels==0.13.5
+ subprocess32==3.5.4
+ sympy==1.8
+ tbats==1.1.0
+ threadpoolctl==3.1.0
+ tqdm==4.64.1
+ typing\_extensions==4.4.0
+ urllib3==1.25.11
+ wheel==0.37.0
+ wrapt==1.14.1
+ yarl==1.8.2
+ zipp==3.10.0

------
#### [ AWS Glue version 3.0 ]

AWS La versione 3.0 di Glue include i seguenti moduli Python pronti all'uso:,
+ aiobotocore==1.4.2
+ aiohttp==3.8.3
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ async-timeout==4.0.2
+ asynctest==0.13.0
+ attrs==22.2.0
+ avro-python3==1.10.2
+ boto3==1.18.50
+ botocore==1.21.50
+ certifi==2021.5.30
+ chardet==3.0.4
+ charset-normalizer==2.1.1
+ click==8.1.3
+ cycler==0.10.0
+ Cython==0.29.4
+ docutils==0.17.1
+ enum34==1.1.10
+ frozenlist==1.3.3
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata==6.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kiwisolver==1.3.2
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidict==6.0.4
+ nltk==3.6.3
+ numpy==1.19.5
+ packaging==23.0
+ pandas==1.3.2
+ patsy==0.5.1
+ Pillow==9.4.0
+ pip==23.0
+ pmdarima==1.8.2
+ ptvsd==4.3.2
+ pyarrow==5.0.0
+ pydevd==2.5.0
+ pyhocon==0.3.58
+ PyMySQL==1.0.2
+ pyparsing==2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ PyYAML==5.4.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2021.8.1
+ s3transfer==0.5.0
+ scikit-learn==0.24.2
+ scipy==1.7.1
+ six==1.16.0
+ Spark==1.0
+ statsmodels==0.12.2
+ subprocess32==3.5.4
+ sympy==1.8
+ tbats==1.1.0
+ threadpoolctl==3.1.0
+ tqdm==4.64.1
+ typing\_extensions==4.4.0
+ urllib3==1.25.11
+ wheel==0.37.0
+ wrapt==1.14.1
+ yarl==1.8.2
+ zipp==3.12.0

------
#### [ AWS Glue version 2.0 ]

AWS La versione 2.0 di Glue include i seguenti moduli Python pronti all'uso:
+ avro-python3==1.10.0
+ awscli==1.27.60
+ boto3==1.12.4
+ botocore==1.15.4
+ certifi==2019.11.28
+ chardet==3.0.4
+ click==8.1.3
+ colorama==0.4.4
+ cycler==0.10.0
+ Cython==0.29.15
+ docutils==0.15.2
+ enum34==1.1.9
+ fsspec==0.6.2
+ idna==2.9
+ importlib-metadata==6.0.0
+ jmespath==0.9.4
+ joblib==0.14.1
+ kiwisolver==1.1.0
+ matplotlib==3.1.3
+ mpmath==1.1.0
+ nltk==3.5
+ numpy==1.18.1
+ pandas==1.0.1
+ patsy==0.5.1
+ pmdarima==1.5.3
+ ptvsd==4.3.2
+ pyarrow==0.16.0
+ pyasn1==0.4.8
+ pydevd==1.9.0
+ pyhocon==0.3.54
+ PyMySQL==0.9.3
+ pyparsing==2.4.6
+ python-dateutil==2.8.1
+ pytz==2019.3
+ PyYAML==5.3.1
+ regex==2022.10.31
+ requests==2.23.0
+ rsa==4.7.2
+ s3fs==0.4.0
+ s3transfer==0.3.3
+ scikit-learn==0.22.1
+ scipy==1.4.1
+ setuptools==45.2.0
+ six==1.14.0
+ Spark==1.0
+ statsmodels==0.11.1
+ subprocess32==3.5.4
+ sympy==1.5.1
+ tbats==1.0.9
+ tqdm==4.64.1
+ typing-extensions==4.4.0
+ urllib3==1.25.8
+ wheel==0.35.1
+ zipp==3.12.0

------

## Appendice A: Creazione di un artefatto con Zip of Wheels
<a name="glue-python-library-zip-of-wheels-appendix"></a>

Dimostriamo con un esempio come creare un artefatto con zip of wheels. L'esempio mostrato scarica i pacchetti `cryptography` `scipy` in un artefatto con zip of wheels e copia lo zip of wheels in una posizione Amazon S3.

1. È necessario eseguire i comandi per creare lo zip of wheels in un ambiente Amazon Linux simile all'ambiente di Glue. Consulta [Appendice B: AWS Dettagli sull'ambiente di incollaggio](#glue-python-libraries-environment-details). Glue 5.1 utilizza AL2023 con la versione 3.11 di python. Crea un Dockerfile che creerà questo ambiente:

   ```
   FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
   
   # Install Python 3.11, pip, and zip utility
   RUN dnf install -y python3.11 pip zip && \
       dnf clean all
   
   WORKDIR /build
   ```

1. Crea un file requirements.txt

   ```
   cryptography
   scipy
   ```

1. Costruisci e avvia il contenitore Docker

   ```
   # Build docker image
   docker build --platform linux/amd64 -t glue-wheel-builder .
   
   # Spin up container
   docker run --platform linux/amd64 -v $(pwd)/requirements.txt:/input/requirements.txt:ro -v $(pwd):/output -it glue-wheel-builder bash
   ```

1. Esegui i seguenti comandi nell'immagine docker

   ```
   # Create a directory for the wheels
   mkdir wheels
   
   # Copy requirements.txt into wheels directory
   cp /input/requirements.txt wheels/
   
   # Download the wheels with the correct platform and Python version
   pip3 download \
       -r wheels/requirements.txt \
       --dest wheels/ \
       --platform manylinux2014_x86_64 \
       --python-version 311 \
       --only-binary=:all:
   
   # Package the wheels into a zip archive with the .gluewheels.zip suffix
   zip -r mylibraries-1.0.0.gluewheels.zip wheels/
   
   # Copy zip to output
   cp mylibraries-1.0.0.gluewheels.zip /output/
   
   # Exit the container
   exit
   ```

1. Carica lo zip delle ruote nella posizione Amazon S3

   ```
   aws s3 cp mylibraries-1.0.0.gluewheels.zip s3://amzn-s3-demo-bucket/example-prefix/
   ```

1. Pulizia opzionale

   ```
   rm mylibraries-1.0.0.gluewheels.zip
   rm Dockerfile
   rm requirements.txt
   ```

1. Esegui il job Glue con i seguenti job args:

   ```
   --additional-python-modules s3://amzn-s3-demo-bucket/example-prefix/mylibraries-1.0.0.gluewheels.zip
   --python-modules-installer-option --no-index
   ```

## Appendice B: AWS Dettagli sull'ambiente di incollaggio
<a name="glue-python-libraries-environment-details"></a>


**Compatibilità della versione Glue e metodi di installazione**  

| AWS Versione Glue | Versione di Python | Immagine di base | versione glibc | Tag della piattaforma compatibili | 
| --- | --- | --- | --- | --- | 
| 6.0 | 3.13 | [Amazon Linux 2023 (AL2023) ](https://aws.amazon.com/linux/amazon-linux-2023/) | 2.34 | manylinux\_2\_34\_x86\_64<br />manylinux\_2\_28\_x86\_64<br />manylinux2014\_x86\_64 | 
| 5.1 | 3.11 | [Amazon Linux 2023 (AL 2023) ](https://aws.amazon.com/linux/amazon-linux-2023/) | 2.34 | manylinux\_2\_34\_x86\_64<br />manylinux\_2\_28\_x86\_64<br />manylinux2014\_x86\_64 | 
| 5.0 | 3.11 | [Amazon Linux 2023 (AL 2023) ](https://aws.amazon.com/linux/amazon-linux-2023/) | 2.34 | manylinux\_2\_34\_x86\_64<br />manylinux\_2\_28\_x86\_64<br />manylinux2014\_x86\_64 | 
| 4.0 | 3,10 | [Amazon Linux 2 (AL2) ](https://aws.amazon.com/amazon-linux-2/) | 2.26 | manylinux2014\_x86\_64 | 
| 3.0 | 3.7 | [Amazon Linux 2 (AL2) ](https://aws.amazon.com/amazon-linux-2/) | 2.26 | manylinux 2014\_x86\_64 | 
| 2.0 | 3.7 | [Amazon Linux AMI (AL1)](https://aws.amazon.com/amazon-linux-ami/) | 2,17 | manylinux 2014\_x86\_64 | 

 Secondo il modello di responsabilità [AWS condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/), sei responsabile della gestione dei moduli Python aggiuntivi, delle librerie e delle relative dipendenze che usi con i tuoi lavori Glue ETL. AWS Ciò include l'applicazione di aggiornamenti e patch di sicurezza. 

 AWS Glue non supporta la compilazione di codice nativo nell'ambiente di lavoro. Tuttavia, i lavori AWS Glue vengono eseguiti in un ambiente Amazon-managed Linux. È possibile fornire le dipendenze native in un formato compilato tramite un file wheel Python. Fai riferimento alla tabella precedente per i dettagli sulla compatibilità delle versioni di AWS Glue. 

**Importante**  
 L'utilizzo di dipendenze incompatibili può causare problemi di runtime, in particolare per le librerie con estensioni native che devono corrispondere all'architettura e alle librerie di sistema dell'ambiente di destinazione. Ogni versione di AWS Glue funziona su una versione Python specifica con librerie e configurazioni di sistema preinstallate. 