Impostazione di un ambiente Python dockerizzato: il modo elegante |  di Rami Krispin |  Aprile 2024

 | Intelligenza-Artificiale

Questo post fornisce una guida passo passo per la configurazione di un ambiente di sviluppo dockerizzato Python con VScode e l'estensione Dev Containers.

9 minuti di lettura

15 ore fa

Nel post precedente su questo argomento, Impostazione di un ambiente Python dockerizzato: la strada più difficileabbiamo visto come configurare un ambiente di sviluppo Python dockerizzato tramite l'interfaccia a riga di comando (CLI). In questo post esamineremo un approccio più elegante e robusto per la configurazione di un ambiente di sviluppo Python dockerizzato utilizzando VScode e Contenitori di sviluppo estensione.

Articoli Correlati:

Al termine di questo tutorial sarai in grado di configurare un semplice ambiente di sviluppo Python con VScode e l'estensione Dev Containers.

Illustrazione VScode (creata dall'autore con Midjourney)

Per seguire questo tutorial, avrai bisogno di quanto segue:

  • Docker Desktop (o equivalente) se utilizzi una macchina con sistema operativo macOS o Windows, oppure Docker installato se utilizzi un sistema operativo Linux
  • Account Docker Hub da cui estrarre l'immagine
  • IDE VScode e il Contenitori di sviluppo estensione installata

In questo tutorial utilizzeremo l'immagine ufficiale Python: python:3.1o.

Tutti gli esempi di codice in questo post sono disponibili qui:

Prima di iniziare, spieghiamo cos'è l'estensione Dev Containers e quando dovresti considerare di utilizzarla.

In poche parole, l'estensione VScode Dev Containers ti consente di aprire senza problemi una sessione VScode isolata all'interno di un contenitore docker. Il livello di isolamento comprende i seguenti tre livelli:

  • Ambiente
  • Impostazioni del codice VS
  • Estensioni VScode

IL devcontainer.json file definisce le impostazioni della sessione, consentendoci di impostare e definire i tre livelli precedenti.

Per impostare e avviare la cartella del progetto all'interno di un contenitore con l'estensione Dev Containers, avrai bisogno dei due componenti seguenti:

  • Installa il Contenitori di sviluppo estensione
  • Nella cartella del tuo progetto, crea una cartella denominata .devcontainer e imposta a devcontainer.json file

Il diagramma seguente descrive l'architettura generale di Dev Containers:

L'architettura di estensione Dev Containers (credit Rami Krispin)

Al momento del lancio, l'estensione Dev Containers avvia una nuova sessione VScode all'interno di un contenitore. Per impostazione predefinita, monta la cartella locale nel contenitore, il che ci consente di mantenere il codice persistente e sincronizzarlo con la nostra cartella locale. Puoi montare cartelle aggiuntive, ma questo non rientra nell'ambito di questo tutorial.

Nella prossima sezione vedremo come impostare un ambiente Python con il file devcontainer.json file.

Prima di iniziare con devcontainer.json impostazioni, definiamo innanzitutto l'ambito dell'ambiente di sviluppo. Dovrebbe includere le seguenti funzionalità:

  • Pitone 3.10
  • Supporta i notebook Jupyter
  • Installa le librerie richieste: librerie di supporto Pandas e VScode Jupyter
  • Installa le estensioni di supporto: Python e Jupyter

Nelle sezioni seguenti approfondiremo le funzionalità principali di devcontainer.json file. Inizieremo con un ambiente Python minimalista e dimostreremo come personalizzarlo aggiungendo diversi livelli di personalizzazione.

Costruzione vs. immagine

Il requisito principale per avviare una sessione containerizzata con l'estensione Dev Containers è definire le impostazioni dell'immagine. Esistono due approcci per impostare l'immagine:

  • Crea l'immagine ed eseguila durante il momento del lancio del contenitore con il file build discussione. Questo argomento consente di definire un Dockerfile per la build e passare argomenti al file docker build funzione. Una volta terminato il processo di compilazione, verrà avviata la sessione all'interno del contenitore
  • Avvia la sessione con un'immagine esistente utilizzando il file image discussione

A seconda dei casi d’uso, ogni metodo ha i suoi pro e contro. Dovresti considerare l'utilizzo di image argomento quando si dispone di un'immagine che soddisfa pienamente i requisiti dell'ambiente. Allo stesso modo, un buon caso d'uso per il build argomento è quando hai un'immagine di base ma devi aggiungere impostazioni di personalizzazione minori.

Nella sezione successiva, inizieremo con un semplice esempio di avvio di un ambiente Python utilizzando il file image argomento per importare l'immagine Python ufficiale (python:3.10).

Ambiente Python dockerizzato di base

Il sotto devcontainer.json file fornisce un semplice esempio per la configurazione di un ambiente Python. Utilizza il image argomento per definire il python:3.10 image come ambiente di sessione:

devcontainer.json

{
"name": "Python Development Environment",
"image": "python:3.10"
}

IL name l'argomento definisce il nome dell'ambiente. In questo caso, lo impostiamo come Ambiente di sviluppo Python.

Prima di avviare l'ambiente, assicurati che:

  • Il tuo desktop Docker (o equivalente) è aperto
  • Hai effettuato l'accesso a Docker Hub (o estrai in anticipo l'immagine Python)
  • IL devcontainer.json il file è impostato nella cartella del progetto sotto il file .devcontainer cartella:
.
└── .devcontainer
└── devcontainer.json

Il codice per questo esempio è disponibile Qui.

Per avviare una sessione, fare clic su Dev Container >< simbolo in basso a sinistra e selezionare il Reopen in Container opzione come dimostrato nello screenshot qui sotto:

Avvio della sessione all'interno di un contenitore con l'estensione Dev Containers (screenshot dell'autore)

Tieni presente che durante il primo avvio della sessione, l'estensione Dev Containers cercherà l'immagine definita dal file image argomento (in questo caso – python:3.10). Se l'immagine non è disponibile localmente, la estrarrà da Docker Hub e potrebbero essere necessari alcuni minuti. Successivamente, dovrebbero essere necessari alcuni secondi per avviare la sessione.

La sessione VScode all'interno di un contenitore (screenshot dell'autore)

Nello screenshot qui sopra, puoi vedere la mappatura tra i devcontainer.json argomenti e le impostazioni della sessione. Il nome della sessione è ora disponibile in basso a destra (contrassegnato in viola) e allineato al valore del file name discussione. Allo stesso modo, la sessione è ora in esecuzione all'interno del file python:3.10 contenitore e puoi avviare Python dal terminale.

Il contenitore Python viene fornito con le librerie Python predefinite. Nella sezione seguente vedremo come aggiungere più livelli sopra l'immagine di base Python con il file build discussione.

Personalizza l'ambiente Python con un Dockerfile

Personalizziamo ora l'ambiente di cui sopra modificando il file devcontainer.json. Sostituiremo il image discussione con ilbuild discussione. IL build L'argomento ci consente di creare l'immagine durante l'avvio della sessione con un Dockerfile e di passare gli argomenti al file docker build funzione. Seguiremo lo stesso approccio dimostrato in questo inviare per impostare l'ambiente Python:

  • Importa il python:3.10 come immagine di base
  • Imposta un ambiente virtuale
  • Installa le librerie richieste

Utilizzeremo il seguente Dockerfile per impostare l'ambiente Python:

Dockerfile

FROM python:3.10

ARG PYTHON_ENV=my_env

ENV PYTHON_ENV=$PYTHON_ENV

RUN mkdir requirements

COPY requirements.txt set_python_env.sh /requirements/

RUN bash ./requirements/set_python_env.sh $PYTHON_ENV

Noi usiamo il FROM argomento per importare l'immagine Python e il file ARG E ENVargomenti per impostare l'ambiente virtuale come argomento e variabile di ambiente. Inoltre, utilizziamo i seguenti due file di supporto per impostare un ambiente virtuale e installare le librerie richieste:

  • requirements.txt – un file di impostazioni con un elenco di librerie richieste. Per questa dimostrazione installeremo la libreria Pandas, versione 2.0.3., e le librerie di supporto Jupyter (ipykernel, ipywidgets, jupyter). La libreria wheels è una libreria di supporto che gestisce le dipendenze C
  • set_python_env.sh – uno script bash helper che imposta un ambiente virtuale e installa le librerie richieste utilizzando il file requirements.txt file

requirements.txt

wheel==0.40.0
pandas==2.0.3
ipykernel
ipywidgets
jupyter

set_python_env.sh

#!/usr/bin/env bash

PYTHON_ENV=$1

python3 -m venv /opt/$PYTHON_ENV \
&& export PATH=/opt/$PYTHON_ENV/bin:$PATH \
&& echo "source /opt/$PYTHON_ENV/bin/activate" >> ~/.bashrc

source /opt/$PYTHON_ENV/bin/activate

pip3 install -r ./requirements/requirements.txt

Ultimo ma non meno importante, utilizzeremo il seguente file di test per valutare se la libreria Pandas è stata installata correttamente e stamperemo Ciao mondo! Messaggio:

test1.py

import pandas as pd

print("Hello World!")

Apportiamo le modifiche nel file devcontainer.json file e sostituire il file image discussione con il build discussione:

devcontainer.json

{
"name": "Python Development Environment",
"build": {
"dockerfile": "Dockerfile",
"context": ".",
"args": {
"PYTHON_ENV": "my_python_dev"
}
}
}

I file per questo esempio sono disponibili Qui.

IL build gli argomenti secondari ci consentono di personalizzare la creazione dell'immagine passando argomenti al file docker build funzione. Usiamo i seguenti argomenti per costruire l'immagine:

  • dockerfile – il percorso e il nome del Dockerfile
  • context – imposta il percorso del file system locale per consentire l'accesso ai file con estensione COPY argomento durante la fase di compilazione. In questo caso, utilizziamo la cartella corrente del file devcontainer.json file (ad esempio, il .devcontainer cartella).
  • args – imposta e passa argomenti al contenitore durante il processo di compilazione. Noi usiamo il PYTHON_ENV argomento per impostare l'ambiente virtuale e denominarlo come my_python_dev

Dovresti avere i tre file…” Dockerfile, requirements.txtE set_python_env.sh memorizzato sotto il .devcontainer cartella, insieme al file devcontainer.json file:

.
├── .devcontainer
│ ├── Dockerfile
│ ├── devcontainer.json
│ ├── requirements.txt
│ └── set_python_env.sh
└── test2.py

Lanciamo ora la sessione utilizzando le nuove impostazioni e testiamola con il file test1.py file:

Esecuzione di uno script Python per testare l'ambiente (screenshot dell'autore)

Come puoi notare nello screenshot qui sopra, siamo riusciti a eseguire con successo lo script di test dal terminale (contrassegnato in viola) e ha stampato il file Ciao mondo! messaggio come previsto (contrassegnato in verde). Inoltre, l'ambiente virtuale che abbiamo impostato nell'immagine (my_python_dev) viene caricato per impostazione predefinita (contrassegnato in giallo).

Nella sezione successiva vedremo come personalizzare le impostazioni VScode della sessione Dev Containers.

Personalizza le impostazioni VScode

Una delle grandi funzionalità dell'estensione Dev Containers è che isola l'impostazione della sessione dalle impostazioni principali di VScode. Ciò significa che puoi personalizzare completamente le impostazioni VScode a livello di progetto. Estende la riproducibilità dell'ambiente di sviluppo oltre le impostazioni Python o del sistema operativo. Ultimo ma non meno importante, rende la collaborazione con altri o il lavoro su più macchine fluida ed efficiente.

Concluderemo questo tutorial con il prossimo esempio, dove vediamo come personalizzare le impostazioni di VScode con il file customizations discussione. Aggiungeremo l'argomento all'esempio precedente e utilizzeremo il metodo vscode argomento secondario per impostare l'interprete Python predefinito dell'ambiente e le estensioni richieste:

devcontainer.json

{
"name": "Python Development Environment",
"build": {
"dockerfile": "Dockerfile",
"context": ".",
"args": {
"PYTHON_ENV": "my_python_dev"
}
},
"customizations": {
"vscode": {
"settings": {
"python.defaultInterpreterPath": "/opt/my_python_dev/bin/python3",
"python.selectInterpreter": "/opt/my_python_dev/bin/python3"
},
"extensions": (
"ms-python.python",
"ms-toolsai.jupyter"
)
}
}
}

I file per questo esempio sono disponibili Qui.

Noi usiamo il settings argomento per definire l'ambiente virtuale Python come definito nell'immagine. Inoltre, utilizziamo il extensions argomento per l'installazione di Pitone E Giove estensioni di supporto.

Nota: Il percorso dell'ambiente virtuale definito dal tipo di applicazione utilizzato per impostare l'ambiente. Come usiamo venv e lo chiamò come my_python_devil percorso è opt/my_python_dev/bin/python3.

Dopo aver aggiunto l'estensione Python, possiamo avviare gli script Python utilizzando il plug-in dell'estensione, come dimostrato nello screenshot seguente. Inoltre possiamo eseguire il codice Python sfruttando l'estensione Juptyer, in modalità interattiva:

In questo tutorial abbiamo esaminato come impostare un ambiente Python dockerizzato con VScode e l'estensione Dev Containers. L'estensione Dev Containers rende l'integrazione dei contenitori con il flusso di lavoro di sviluppo semplice ed efficiente. Abbiamo visto come, con pochi semplici passaggi, possiamo impostare e personalizzare un ambiente Python dockerizzato utilizzando il file devcontainer.json file. Abbiamo esaminato i due approcci per impostare l'immagine della sessione con il file image E build argomenti e impostare estensioni con il file customizations discussione. Esistono ulteriori opzioni di personalizzazione che non sono state trattate in questo tutorial e ti consiglio di verificarle:

  • Definire le variabili d'ambiente
  • Montare volumi aggiuntivi
  • Imposta gli argomenti su docker run comando
  • Esegui il comando post-avvio

Se sei interessato ad approfondire maggiormente i dettagli, ti consiglio di consultare questo tutorial:

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *