Come posso aggiungere pacchetti Python con binari compilati al mio pacchetto di distribuzione e rendere il pacchetto compatibile con Lambda?

3 minuti di lettura
0

Ho usato pip per installare un pacchetto Python che contiene codice compilato e ora la mia funzione AWS Lambda restituisce un errore "Impossibile importare il modulo".

Breve descrizione

I pacchetti Python che contengono codice compilato, come NumPy e pandas, non sono sempre compatibili con i runtime Lambda per impostazione predefinita. Se installi questi pacchetti utilizzando pip, i pacchetti scaricano e compilano un pacchetto con nome del modulo per l'architettura della macchina locale. Se non utilizzi un sistema operativo (OS) Linux, ciò rende il tuo pacchetto di distribuzione incompatibile con i runtime di Lambda Python.

Per rendere il tuo pacchetto di distribuzione o livello compatibile con Lambda su un sistema operativo non Linux, esegui il comando pip install con manylinux2014 come valore del parametro --platform.

Nota: i tag macOS \ --platform non funzionano. Ad esempio, i tag win_amd64 e macosx_10_6_intel non installano un pacchetto di distribuzione compatibile con Lambda.

Soluzione

Nota: la procedura di esempio seguente mostra come installare panda per il runtime Lambda Python 3.9 che funziona sull'architettura x86_64.

  1. Aprire un prompt dei comandi. Quindi, esegui il seguente comando pip per verificare onfermare che stai utilizzando una versione di pip pari alla versione 19.3.0 o successiva:

    pip --version

    Se stai utilizzando una versione di pip precedente alla versione 19.3.0 di pip, esegui l'upgrade all'ultima versione di pip:

    python3.9 -m pip install --upgrade pip
  2. Installa il file.whl del pacchetto Python precompilato come dipendenza nella directory del progetto della tua funzione Lambda:

    Importante: sostituisci my-lambda-function con il nome della directory del progetto della tua funzione.

    pip install \    
        --platform manylinux2014_x86_64 \
        --target=my-lambda-function \
        --implementation cp \
        --python-version 3.9 \
        --only-binary=:all: --upgrade \
        pandas
  3. Apri la directory dei progetti della tua funzione Lambda. Se usi macOS, esegui il seguente comando:

    cd my-lambda-function
  4. In un editor di testo, crea un nuovo file denominato lambda_function.py. Quindi, copia e incolla il seguente codice di esempio nel file:

    import numpy as np
    import pandas as pd
    def lambda_handler(event, context):
        df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=["a", "b", "c"])
        number = np.pi
        print(df2)
        print(number)

    Salva questo file nella directory del progetto della tua funzione Lambda.

  5. Crea un archivio di file .zip del pacchetto di distribuzione Lambda che includa tutte le librerie e il codice sorgente installati:

    zip -r ../my-deployment-package.zip .

    Usa l'archivio di file my-deployment-package.zip per creare una nuova funzione Python 3.9 Lambda o per aggiornarne una esistente. Per istruzioni, vedere Utilizzo degli archivi di file.zip per le funzioni di Python Lambda.

    **Nota:**è possibile utilizzare una procedura simile per creare un layer Lambda che può essere utilizzato in più funzioni. Ad esempio, il comando seguente crea un nuovo livello Lambda per installare pandas per il runtime Lambda Python 3.9, in esecuzione sull'architettura arm64:

    pip install \
        --platform manylinux2014_aarch64 \
        --target=./python/lib/python3.9/site-packages \
        --implementation cp \
        --python-version 3.9 \
        --only-binary=:all: --upgrade \
        pandas

Informazioni correlate

Creazione e condivisione di livelli Lambda

AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa