PyEnv
PyEnv è uno script che consente di utilizzare una versione diversa di Python per ogni progetto.
Lo script di setup è già installato sulle macchine, quindi per utilizzarlo basta lanciare:
/usr/local/bin/pyenv-install.sh
Seguendo le indicazioni a video, conviene aggiungere le linee indicate al proprio file ~/.bashrc. Ad esempio, io ho dovuto aggiungere:
# Load pyenv automatically by appending
# the following to
# ~/.bash_profile if it exists, otherwise ~/.profile (for login shells)
# and ~/.bashrc (for interactive shells) :
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
# Restart your shell for the changes to take effect.
# Load pyenv-virtualenv automatically by adding
# the following to ~/.bashrc:
eval "$(pyenv virtualenv-init -)"
Per vedere le versioni di Python disponibili sulla macchina è possibile lanciare:
pyenv versions
Per vedere le versioni di Python installabili, è possibile lanciare:
pyenv install -l
Ad esempio, i moduli utilizzati dal mio progetto richiedono Python 3.11; per installarlo posso lanciare:
pyenv install 3.11
Il comando si occuperà di scaricare la versione di Python richiesta, e inizierà a compilarlo. Questa operazione può durare alcuni minuti.
Sulle macchine dovrebbero già esserci tutti i pacchetti necessari per compilare le versioni recenti di Python. In caso di problemi o errori durante la compilazione, segnalateci il problema, con le linee pertinenti dell’output del comando (ad esempio le ultime 30-50 linee).
Per impostare la versione di Python che ho appena compilato come versione predefinita per questo progetto, prima entro nella directory del progetto, e poi lancio:
pyenv local 3.11
Da questo punto in avanti, appena mi sposterò nella directory del progetto o in una sua sottocartella, la versione di Python nel PATH cambierà, e verrà attivata quella richiesta.
Posso verificare la situazione con il comando pyenv versions, visto in precedenza; la versione attiva è evidenziata con un asterisco (*).
PyEnv e tcsh
PyEnv per ora funziona solo con la bash o con shell compatibili.
Chi utilizza altre shell, come la tcsh, può seguire una procedura alternativa per utilizzare in qualche modo una parte delle funzioni di PyEnv.
Si perde la possibilità di cambiare la versione di Python in base alla directory in cui ci si trova, e non è possibile cambiare il default, ma quando si utilizzano i venv non è così importante, perché nel momento in cui si attiva il venv, tutto va a posto.
Lo scopo di questo esempio è creare un venv con Python 3.13.
Per il setup iniziale, utilizziamo la bash, che possiamo lanciare all’interno della nostra sessione in tcsh:
bash
Dopodiché installiamo PyEnv come descritto in precedenza:
pyenv-install.sh
Andiamo ad integrare tutte le modifiche descritte al nostro file ~/.bashrc, ad esempio con il vi:
vi ~/.bashrc
E poi ricarichiamo lo stesso con:
source ~/.bashrc
A questo punto possiamo installare la versione di Python desiderata:
pyenv install 3.13
Ci vorrà un po’ di tempo, perché il sistema scaricherà i sorgenti di Python e lo compilerà per noi. Il risultato verrà salvato in ~/.pyenv/shims/.
A questo punto possiamo uscire dalla sessione bash e ritornare alla nostra tcsh:
exit
Ci spostiamo all’interno della directory del progetto, in cui vogliamo creare il venv, e nel comando lanciamo la versione di Python che ci interessa, andando a specificarne il percorso completo.
Nel nostro caso il comando diventa:
~/.pyenv/shims/python3.13 -m venv .venv
A questo punto possiamo attivare il venv come al solito, con:
source .venv/bin/activate.csh
E la versione 3.13 di Python diventa il default per il venv, quindi quando l’ambiente è attivo non abbiamo più necessità di utilizzare il percorso completo. Possiamo semplicemente richiamare Python con python3 o anche solo python.
Verifichiamo la versione con:
python -V
Nel mio caso ottengo “3.13.12”, che è l’ultima versione della serie 3.13, al momento di queste prove.