PYENV: Installazioni Multiple di Python su Linux e MacOS
Pubblicato da Michele Saba
Lavorare con versioni diverse di Python su Windows è piuttosto semplice e lineare, ma su Linux e Mac OS la procedura può diventare complicata per via dell'utilizzo di Python da parte degli stessi a livello di sistema.
Ma non temete perché esiste un'ottima soluzione al problema.
In questa lezione vedremo insieme come scaricare ed installare pyenv: si tratta di un utility per Linux e MacOS che ci permette di tenere all'interno dello stesso sistema operativo differenti versioni dell'interprete Python senza andare a creare confusione e problemi.
Possiamo poi utilizzare diverse versioni dell’interprete per creare ambienti virtuali specifici per i nostri progetti e installare all'interno di questi nelle dipendenze relative alla versione che stiamo utilizzando.
Installiamo le dipendenze in base al nostro sistema operativo
La pagina della Wiki di pyenv contiene l’elenco dei package che dovremo installare per poter poi utilizzare l’utility in base al nostro sistema operativo specifico, ad esempio per MacOS bisogna installare Xcode Command Line Tools, Homebrew e poi digitare da terminale la seguente riga di comando:
brew install openssl readline sqlite3 xz zlib tcl-tk
Mentre su Ubuntu le righe di comando necessarie sono le seguenti:
sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
Installazione di pyenv
Apriamo il terminale e digitiamo la seguente riga di comando per installare pyenv:
curl https://pyenv.run | bash
Una volta completata l'installazione dovremo copiare le tre righe fornite come output dall’installazione all’interno del file nascosto .bashrc nella home del nostro sistema operativo. Le righe specifiche potrebbero differire da quelle seguenti, in ogni caso fate riferimento all’output della vostra shell:
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Utilizziamo l’editor testuale integrato nano per aprirlo e modificarlo su Linux, oppure pico su Mac OS
nano .bashrc
Andiamo alla fine del file e copiamo le tre righe all’interno. Chiudiamo il file, chiudiamo nano e riavviamo la shell. Adesso dovremmo essere in grado di utilizzare il comando pyenv:
pyenv
Una volta lanciato ci fornisce una lista di comandi da utilizzare insieme a quello principale. Con il comando versions ci fornisce una lista delle versioni di Python installate nel nostro sistema:
pyenv versions
# output
* system (set by /home/user/.pyenv/version)
Come installare una specifica versione di Python con pyenv
Innanzitutto dobbiamo verificare quale versione di Python abbiamo come predefinita nel sistema operativo. Digitiamo:
python3 -V
# output
3.11.2
Se vogliamo installare una versione specifica di Python come ad esempio la 3.10.6 possiamo installarla nel sistema operativo in questo modo:
pyenv install 3.10.6
# output
Downloading Python-3.10.6.tar.xz...
-> https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz
Installing Python-3.10.6...
Installed Python-3.10.6 to /home/user/.pyenv/versions/3.10.6
Adesso se utilizziamo di nuovo il comando versions vedremo oltre a system anche la versione di Python che abbiamo appena installato:
pyenv versions
# output
* system (set by /home/user/.pyenv/version)
3.10.6
La versione di Python corrente è sempre seguita da un asterisco.
Se digitiamo il comando install senza specificare una versione possiamo vedere una lista di tutte le versioni di Python disponibili per l’installazione, tra cui anche versioni relative ad Anaconda e versioni alpha e di sviluppo:
pyenv install -l
Creare un ambiente virtuale con pyenv
Proviamo ora ad attivare la versione che abbiamo precedentemente installato creando un ambiente virtuale tramite il comando virtualenv. Creiamo una nuova cartella chiamata example-pyenv e dal suo interno creiamo un nuovo ambiente virtuale specificando la versione di Python che vogliamo utilizzare e un nome:
pyenv virtualenv 3.10.6 example
Se digitiamo il comando ls vedremo che non è presente alcun file o cartella all'interno del nostro percorso: questo è perché in quanto ambienti virtuali creati e gestiti con pyenv possiamo trovare questi all'interno di una cartella specifica per questa utility.
Attivare un ambiente virtuale con pyenv
Per attivare un ambiente virtuale dobbiamo utilizzare il comando activate insieme al nome che abbiamo scelto per il nostro ambiente, nel nostro caso example:
pyenv activate example
Adesso dovremmo vedere all’inizio della nostra riga di comando tra parentesi il nome dell’ambiente virtuale. Se proviamo adesso a verificare la versione di Python vedremo quella che abbiamo scelto per l’ambiente virtuale corrente:
python3 -V
# output
Python 3.10.6
Disattivare un ambiente virtuale con pyenv
Per disattivare l’ambiente virtuale digitiamo:
source deactivate
Se verifichiamo di nuovo la versione di Python vedremo che siamo tornati a quella di sistema:
python3 -V
# output
Python 3.11.2
Il comando local di pyenv
Per una questione di comodità possiamo evitare di dare il comando activate utilizzando il comando local, che ci permette di gestire per ciascun singolo progetto un ambiente virtuale dedicato che verrà attivato automaticamente quando entriamo nella cartella che lo contiene:
pyenv local example
L’ambiente virtuale è stato attivato e non appena usciamo dalla cartella del progetto si disattiverà in automatico.
Adesso possiamo andare a installare nel nostro ambiente tutti i package che ci servono tramite pip.