3 minutes
VSCode et les pipenv
Introduction
Pipenv
est un utilitaire pratique permettant de gérer facilement les dépendances de ses projets avec des environnements virtuels.
C’est l’équivalent de npm
en NodeJS. Il est un peu plus avancé que les virtualenv
.
Voici comment utiliser pipenv avec Visual Studio Code.
Virtual environment création & pipenv installation
Imaginez que vous cloniez un projet qui contient un fichier Pipfile. La première chose à faire est d’excuter la commande pipenv install --dev --python version_installee_par_pyenv
. Cette commande va créer un environnement virtuel dans le répertoire suivant ~/.local/share/virtualenvs/
ou dans ~/.virtualenvs/
en fonction de votre OS et paramètres d’installation.
Bien sûr pipenv doit être installé sur votre poste. Pour ce faire, il suffit d’exécuter la commande suivante:
pip3 install --user pipenv
.
pyenv
Pyenv vous permet d’installer des versions de Python très facilement. C’est l’équivalent de nvm
en NodeJS.
Par exemple pyenv install 3.7.1
permet de télécharger et d’installer Python 3.7.1 sur son poste.
Note: zlib et sqlite sont nécessaires pour que pyenv fonctionne. Il faut exécuter les commandes suivantes:
brew install zlib
etbrew install sqlite
Si vous utilisez Fish Shell la config suivante est à ajouter dans votre fichier
~/.config/fish/config.fish
:
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
#pyenv init - | source ## permet de démarrer un virtualenv au démarrage d'une session d'un terminal
#pyenv rehash >/dev/null ^&1
# Build python
# For compilers to find zlib and sqlite you may need to set:
export LDFLAGS="$LDFLAGS -L/usr/local/opt/zlib/lib"
export LDFLAGS="$LDFLAGS -L/usr/local/opt/sqlite/lib"
export CPPFLAGS="$CPPFLAGS -I/usr/local/opt/zlib/include"
export CPPFLAGS="$CPPFLAGS -I/usr/local/opt/sqlite/include"
# For pkg-config to find zlib and sqlite you may need to set:
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH /usr/local/opt/zlib/lib/pkgconfig"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH /usr/local/opt/sqlite/lib/pkgconfig"
VSCode config
Exécutez la commande suivante pour configurer VSCode pour votre projet:
mkdir .vscode && touch .vscode/settings.json
Contenu du fichier .vscode/settings.json
. Je suppose que vos tests sont réalisés avec Pytest:
{
"python.pythonPath": "/Users/olivier/.virtualenvs/MON_VIRTUAL_ENV/bin/python",
"python.linting.enabled": true,
"python.linting.flake8Enabled": true,
"python.formatting.provider": "black",
"editor.rulers": [
79
]
}
Remplacez /Users/olivier/.virtualenvs/MON_VIRTUAL_ENV/bin/python
par votre propre virtualenv créé lors de l’exécution de la commande pipenv install --dev --python version_installee_par_pyenv
. Pour connaître le path de votre virtualenv vous pouvez utiliser la commande pipenv --py
.
Note: Si un terminal était déjà ouvert dans VSCode et que le virtualenv n’a pas été pris en compte, on peut utiliser la commande
pipenv shell
pour basculer dessus.
Et voilà c’est tout, c’est simple !
Si vous allez dans l’onglet Tests dans VScode et que vos tests sont automatiquement détectés, c’est que tout est bien configuré.
Alternative (virtualenvwrapper)
Utiliser Virtualenvwrapper https://virtualenvwrapper.readthedocs.io. Cela fonctionne extrèmement bien.
Pour créer un environnement il suffit d’utiliser la commande suivante:
mkvirtualenv -p /usr/local/bin/python3.7 -a . ai_env
Pour dire à VSCode de proposer un interprêteur Python créé dans un virtualenv(wrapper) lorsque l’on exécute la commande cmd + shift + p --> Python: Select interpreter
, il suffit de lui ajouter la variable globale ci-dessous et de le redémarrer.
"python.venvPath": "$HOME/.virtualenvs",
# ou un autre répertoire si vous avez configuré autre chose comme répertoire par défaut pour virtualenvwrapper dans votre ~/.zshrc...
Quick tip
Il est possible de convertir un fichier Pipfile.lock
en requirements.txt
grâce à la commande suivante:
jq -r '.default
| to_entries[]
| .key + .value.version' \
Pipfile.lock > requirements.txt
Le petit alias qui va bien pour son ~/.zshrc
:
alias pipfile_to_requirements='
jq -r ".default
| to_entries[]
| .key + .value.version" \
Pipfile.lock > requirements.txt'