2 minutes
Charger automatiquement les variables d’environnement et virtualenv des projets Python
Dans cet article, nous allons voir comment charger (et décharger) automatiquement les variables d’environnements de vous projets lors d’un cd
(et accessoirement comment sourcer et désactiver les virtualenv Python).
D’autres solutions alternatives que je ne recommande pas existent: pipenv, autoenv
direnv
Pour ce faire, nous allons utilise un utilitaire appelé direnv qui est disponible pour pas mal de distributions.
Le projet est accessible à l’adresse suivante: https://github.com/direnv/direnv
Installation sur OSX:
brew install direnv
Pour finir l’installation, il faut ajouter ensuite le code suivant dans votre fichier ~/.zshrc
:
eval "$(direnv hook zsh)"
realpath() {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
layout_python-venv() {
local python=${1:-python3}
[[ $# -gt 0 ]] && shift
unset PYTHONHOME
if [[ -n $VIRTUAL_ENV ]]; then
VIRTUAL_ENV=$(realpath "${VIRTUAL_ENV}")
else
local python_version
python_version=$("$python" -c "import platform; print(platform.python_version())")
if [[ -z $python_version ]]; then
log_error "Could not detect Python version"
return 1
fi
VIRTUAL_ENV=$PWD/.direnv/python-venv-$python_version
fi
export VIRTUAL_ENV
if [[ ! -d $VIRTUAL_ENV ]]; then
log_status "no venv found; creating $VIRTUAL_ENV"
"$python" -m venv "$VIRTUAL_ENV"
fi
PATH="${VIRTUAL_ENV}/bin:${PATH}"
export PATH
}
# Customiser le prompt
setopt PROMPT_SUBST
show_virtual_env() {
if [[ -n "$VIRTUAL_ENV" && -n "$DIRENV_DIR" ]]; then
echo "($(basename $VIRTUAL_ENV))"
fi
}
PS1='$(show_virtual_env) '$PS1
L’installation est maintenant terminée. Il vous suffit de créer un fichier .envrc
dans votre dossier/ projet et il sera automatiquement chargé (après une autorisation de sécurité via la commande direnv allow
).
Exemple de contenu pour le fichier .envrc
:
export MA_VAR0=...
export MA_VAR1=...
export MA_VAR2=...
# Charger un virtualenv
layout python
Avec la ligne layout python
, un virtualenv sera automatiquement créé dans le path .direnv/python-3.9.5/bin/python
de votre projet.
Plus d’info sur le virtualenv; comme par exemple le support de poetry ou pyenv à l’adresse suivante: https://github.com/direnv/direnv/wiki/Python
pyenv
direnv
est compatible avec pyenv
. A la place de la ligne layout python
on peut spécifier la version de Python que l’on veut utiliser dans son projet. Par exemple: layout pyenv 3.7.11
.
Rappel pour installer pyenv:
curl -L https://pyenv.run | bash echo 'export PATH="~/.pyenv/bin:$PATH"' >> ~/.zshrc $ echo 'eval "$(pyenv init -)"' >> ~/.zshrc $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc $ source ~/.zshrc pyenv install -l pyenv install 3.7.11
En conclusion, c’est un projet simple et efficace.