Développer en Python sur Windows avec VSCode, WSL 2 et interface graphique
Vous commencez à apprendre le Python (au hasard avec OpenClassrooms 🤓) et vous souhaitez garder un environnement de développement sain sans foutre le boxon dans Windows ?
Vous aimeriez vous familiariser avec Linux sans pour autant remplacer votre système ou mettre en place un dual-boot ?
L’une des solutions est d’installer une machine virtuelle comme VirtualBox ou VMWare mais c’est un peu fastidieux et surtout gourmand en ressource. Il y’a aussi la possibilité d’utiliser des containers comme Docker mais c’est tout un workflow à apprendre. La solution la plus simple, à condition d’utiliser Microsoft Windows 10 version 1903 ou supérieure, c’est Windows Subsystem for Linux (ou plus communément WSL) !
WSL est une fonction de Windows 10 qui permet d’utiliser Linux de façon native (ou presque, on ne va pas rentrer dans les détails).
Pourquoi WSL 2 ? Car elle est beaucoup plus performante que la première (logique 🧠).
Pourquoi j’ai précisé “avec interface graphique” dans le titre ? Car normalement WSL ne supporte pas l’affichage. Ce n’est pas très embêtant car on utilise la ligne de commande les 3/4 du temps mais…ce n’est pas le cas de tout les programmes que l’on développe 🙃. Par exemple si vous commencez chez OpenClassrooms, très vite on vous apprendra à créer un graphique. Sans la manipulation que l’on fera à l’étape 8, ça ne marchera pas et le programme plantera.
La mise en place peut faire peur mais ne vous inquiétez pas, tout va bien se passer…et puis, c’est à faire qu’une fois !
- Installation de WSL 2
- Installation d’une distribution Linux
- Gestion basique de Debian
- Installation de Windows Terminal (optionnel)
- Gestion de WSL 2
- Installation de Python via pyenv
- Gestion basique de pyenv et virtualenv
- Installation du serveur graphique pour WSL 2 avec VcXsrv
- VSCode & Conclusion
1. Installation de WSL 2
Pour l’instant le seul moyen d’installer WSL 2 est d’installer la première version et de faire la mise à jour (sauf si vous faites parti du programme Windows Insiders mais dans ce cas…vous n’avez pas besoin de ce guide 😬).
- Dans la barre de recherche de Windows, commencez à taper “powershell”. On va vous proposer l’application Windows PowerShell. Faites un clique droit dessus et choisissez “Exécuter en tant qu’administrateur”.
- Une fenêtre bleue avec une invite de commande va apparaître, dedans tapez le code ci-dessous et faites “Entrer” :
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux
- Attendez que l’installation se termine puis, sans redémarrer, exécutez la ligne ci-dessous :
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- Une fois terminée, redémarrez.
Petit point rapide : on vient d’installer WSL 1 en ligne de commande (on pouvait le faire autrement mais autant se familiariser maintenant si vous voulez jouer avec Linux !) puis on a installé le support de machines virtuelles de Windows.
Maintenant nous allons mettre à jour WSL pour passer à la version 2, téléchargez ce fichier :
Et exécutez-le. Si vous avez une erreur, vous avez sûrement oublié de redémarrer à l’étape précédente 😉 (si c’est le cas, votre Windows est-il bien à jour ?).
Voilà ! Vous avez à présent WSL 2 ! D’ailleurs on va dire à Windows d’utiliser cette version par défaut plutôt que la première :
- Ré-ouvrez une fenêtre PowerShell en mode administrateur et entrez ceci :
wsl --set-default-version 2
Parfait, nous allons pouvoir installer une distribution Linux !
2. Installation d’une distribution Linux
Là, c’est simple, il suffit d’ouvrir le Microsoft Store et de rechercher une distribution. Par exemple moi j’utilise Debian depuis des années, c’est ma petite chouchoute.
Une fois que le Store l’a téléchargé il suffit de la lancer pour l’installer. Cela peut prendre quelques minutes. Quand le processus sera terminé, vous serez invité à créer un utilisateur avec un mot de passe puis vous vous retrouverez devant une console :
Vous voilà dans Linux ! Pour y accéder il vous suffira de relancer Debian, ça sera instantané car vous avez déjà passé la phase d’installation 💻 !
3. Gestion basique de Debian
Le premier truc à faire avant tout c’est de mettre à jour notre distribution. Les commandes qui vont suivre concernent Debian et assimilées (comme Ubuntu). Si vous utilisez une autre distribution…Google est votre ami 🔎
Aussi, je ne vais pas rentrer dans les détails sur le fonctionnement de Debian et de son gestionnaire de paquets. Sachez juste qu’en gros, Debian va chercher les mises à jour depuis les url présentes dans le fichier /etc/apt/sources.list et qu’on va légèrement le modifier car ça nous servira plus tard.
Pour ce faire, nous allons utiliser l’éditeur de texte nano. Comme le fichier concerné est un fichier système, on va devoir s’octroyer les droits root. Du-coup :
$ sudo nano /etc/apt/sources.list
La console va vous demander le mot de passe que vous avez créé lors de l’installation puis vous allez vous retrouver dans l’éditeur :
Attention vous êtes dans un éditeur en mode console donc…pas de souris ! Pour se déplacer dans le fichier, utilisez les flèches du clavier (il y’a aussi des raccourcis pratiques à connaître…je vous laisse chercher 😉)
Le but est de rajouter les mots-clés “contrib non-free” à chaque ligne, comme sur la capture d’écran. Ceci permet au gestionnaire de paquets de Debian d’étendre sa base de données.
Pour sauvegarder et quitter nano, utilisez la combinaison de touches “Ctrl + x”.
Ensuite la gestion des paquets est très simple, commencez toujours par mettre à jour la base de données locale :
sudo apt-get update
Puis vérifiez s’il y’a des mises à jour et les installer :
sudo apt-get upgrade
Pour installer un paquet, la commande est :
sudo apt-get install nom_du_paquet
Pour désinstaller :
sudo apt-get remove nom_du_paquet
Pour désinstaller ET supprimer les fichiers de configuration associés :
sudo apt-get purge nom_du_paquet
Voilà ! Vous connaissez les bases pour gérer et manipuler Debian 🤗
On pourrait s’arrêter là mais on va se simplifier la vie un petit peu. En effet, à ce stade vous aurez plusieurs fenêtres d’ouvertes : celle de la console de Debian, celle d’un PowerShell pour gérer votre/vos distributions, peut-être même (sûrement !) d’autres consoles aussi.
Ça ne serai pas cool de pouvoir regrouper toutes ces fenêtres dans une même interface afin d’avoir une vue d’ensemble plutôt que de jongler ? C’est le rôle de Windows Terminal !
4. Installation de Windows Terminal
Eh bien…c’est comme pour la distribution Linux : on lance le Microsoft Store et on recherche “windows terminal”. Done.
Ce terminal permet beaucoup de choses aussi je ne vais pas rentrer dans les détails maintenant (peut-être l’objet d’un prochain article ?). Sachez néanmoins que vous pouvez configurer un peu ce que vous voulez : la police, sa taille, les couleurs…vous pouvez ouvrir des terminaux/consoles dans des onglets ou dans la même fenêtre scindée (cf. la première image de l’article). Tout est paramétrable.
5. Gestion de WSL 2
Voici quelques commandes utiles concernant l’utilisation de WSL 2, à rentrer dans un PowerShell ou Windows Terminal :
- Lister toutes les distributions installées, actives ou non, et sur quelle version de WSL
wsl -l -v --all
- Lister seulement celles qui sont en cours d’exécution
wsl -l --running
- Éteindre une distribution
wsl -t nom_de_la_distribution (ex. : wsl -t Debian)
- Éteindre toutes les distributions
wsl --shutdown
- Afficher l’aide 😅
wsl --help
6. Installation de Python via pyenv
On pourrait très bien installer Python via le site officiel ou directement via le gestionnaire de paquets de notre distribution (sudo apt-get install python3) mais si certains projets demandent une versions spécifique de Python, ça va vite être le bordel.
C’est là qu’intervient pyenv. Cet utilitaire permet d’installer plusieurs versions de Python et de basculer de l’une à l’autre très facilement. Il permet aussi de faciliter la gestion des environnements virtuels (virtualenv) pour Python…chose que vous apprendrez quand vous avancerez dans les cours d’OpenClassrooms (ou autre).
Tout d’abord il faut installer les outils qui permettent de récupérer et compiler des programmes depuis les sources.
Souvenez vous, on commence toujours par mettre à jour apt :
sudo apt-get update
Puis on installe les pré-requis :
sudo apt-get install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev git
Ensuite on s’attaque à pyenv, il y’a deux manières, une automatique et l’autre manuelle (source: https://github.com/pyenv/pyenv#installation). Le plus simple est bien sûr la version automatisée mais si vous n’avez pas confiance en le script utilisé, suivi le guide sur la page liée juste avant 👆
Installation automatisée :
curl https://pyenv.run | bash
Ce script va chercher la dernière version de pyenv, la récupérer avec Git puis la compiler et l’installer. Il va aussi installer quelques plugins pratiques pour plus tard.
Une fois que le script aura terminé son affaire, il vous demandera d’ajouter ceci :
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Dans le fichier .bashrc de l’utilisateur actuel (vous quoi).
Vous savez déjà comment utiliser basiquement un éditeur de texte (nano) donc à vous de jouer 👍
❗ Attention, cette fois vous n’avez pas besoin des droits root pour modifier ce fichier, donc n’utilisez pas “sudo”.
💡 Vérifiez quand même que vous êtes bien à la racine de votre home ; pour s’y rendre facilement la commande est :
cd ~
Validez vos changement en rechargeant votre environnement utilisateur avec la commande :
source .profile
Vous voilà fin prêt à installer Python avec pyenv !
Pour voir les versions disponibles (normalement elles sont quasiment toujours synchro avec les sorties officielles), utilisez la commande :
pyenv install --list
Et recherchez les entrées comme “2.x” ou “3.x”. Par exemple au moment où j’écris ces lignes, la dernière version de Python 3 disponible est la 3.9.2.
Pour installer Python, utilisez simplement le numéro de la version que vous voulez (et dont vous avez vérifié la disponibilité juste avant) :
pyenv install 3.9.2
pyenv va aller chercher pour vous les sources de la version 3.9.2 de Python sur le site officiel, la compiler et l’installer.
Ensuite, on va indiquer au système qu’on veut utiliser cette version par défaut :
pyenv global 3.9.2
Si vous souhaitez connaître toutes les versions installées :
pyenv versions
La ligne avec un * indique que c’est la version actuellement utilisée.
Vérifiez que python marche bien :
python -V
Cette commande doit vous retourner la version actuelle (et active) de Python sur votre système.
7. Gestion basique de pyenv et virtualenv
Voici quelques commandes pour l’utilisation de pyenv et de son plugin pyenv-virtualenv (qui s’est installé automatiquement si vous avez utilisé la version rapide à l’étape précédente 😊)
Mettre à jour pyenv lui-même :
pyenv update
Désinstaller une version de Python :
pyenv uninstall <version>
Créer un environnement virtuel :
pyenv virtualenv <version_de_python_désirée> "nom de l'environnement"
Lister les environnements virtuels que vous avez créés :
pyenv virtualenvs
Activer un environnement virtuel :
pyenv activate "nom de l'environnement"
Désactiver un environnement virtuel :
pyenv deactivate
Vous pouvez aussi faire en sorte d’activer automatiquement un environnement virtuel quand vous entrez dans un dossier (projet) et le désactiver quand vous en sortez.
Il suffit de créer le fichier .python-version à la racine de votre projet et dedans y inclure le nom de l’environnement virtuel que vous voulez utiliser.
Vous savez que vous êtes dans un environnement virtuel quand l’invite de commande est précédé de “(env)” :
(env) kawo@Kawo-laptop:~/dev/OpenClassrooms/Perfectionnez vous avec Python$
8. Installation du serveur graphique pour WSL 2 avec VcXsrv
On arrive enfin au bout de ce guide !
On va d’abord configurer Debian pour qu’il “écoute” le serveur graphique. Rajoutez dans votre fichier .bashrc :
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0export LIBGL_ALWAYS_INDIRECT=1
On recharge notre environnement :
source .profile
Ensuite on va installer un environnement graphique. Il en existe plusieurs, on va utiliser xfce4 qui est simple et léger (on a pas besoin de plus) :
sudo apt-get update; sudo apt-get install xfce4
Cette ligne, à copier telle-quelle, permet de mettre à jour la base apt et d’installer xfce4 👌
Maintenant, retour sur Windows. On va installer le serveur graphique VcXsrv :
- Téléchargez-le sur https://sourceforge.net/projects/vcxsrv/
Installez-le, lancez-le et vous allez voir apparaître ceci :
Sélectionnez “One large window” et mettez 0 à “Display number”. Cliquez sur Suivant :
Sélectionnez “Start no client” puis Suivant :
Cochez “Clipboard”, “Native opengl” et “Disable access control”. Décochez “Primary Selection”.
Dans “Additional parameters for VcXsrv” rajoutez :
-ac
Puis Suivant :
Vous pouvez cliquer sur “Save configuration” puis Terminer. Une fenêtre va se lancer, noire tout d’abord : normal, il faut maintenant lancer l’environnement graphique sous Debian !
startxfce4
La fenêtre de VcXsrv va s’activer et afficher le bureau d’Xfce4. La console va balancer pas mal d’avertissements et d’erreurs car WSL n’aime pas trop ça mais…ça marche !
Si la fenêtre de VcXsrv reste noire il y’a de grandes chances que cela vienne…du pare-feu de Windows.
Dans la barre de recherche de Windows, commencez à taper “pare-feu” et sélectionnez “Par-feu Windows Defender” qui devrait apparaître dans la liste des suggestions.
Dans le menu à gauche cliquez sur l’avant-dernière option “Paramètres avancés”, une fenêtre semblable va s’afficher :
Dans la liste du milieu s’affiche les programmes de votre ordinateur, recherchez toutes les occurrences de “VcXsrv windows xserver” et vérifiez que pour chaque entrée, les règles (clique-droit sur le nom puis “Propriétés”) soient configurées comme ceci sur les onglets “Général”, “Protocoles et ports” et “Avancé” :
Relancez le serveur VcXsrv puis xfce4 et normalement tout devrait marcher ✔
9. VSCode & Conclusion
Personnellement j’utilise l’éditeur Microsoft Studio Code qui s’améliore à chaque version (j’ai laissé tombé Sublime Text pour dire). Il est très facile de travailler avec WSL 2 à l’intérieur de l’éditeur.
La première fois que vous allez le lancer après avoir finit ce guide, il va détecter que WSL est installé et va vous demander si vous voulez activer l’extension “Remote — WSL”.
Oui.
Une fois fait, en bas à gauche de l’éditeur vous aurez une petite icône verte. Cliquez-dessus et un menu déroulant va vous proposer, entre autre, “Remote-WSL: Open Folder in WSL…”. Il va alors activer la distribution (si vous l’aviez désactivé) et vous allez simplement pouvoir parcourir et ouvrir un dossier comme si vous étiez dans Debian directement !
Vous pouvez voir sur la capture d’écran ci-dessus qu’en bas à gauche, l’icône verte indique que VSCode est bien connecté à WSL sur la distribution Debian.
De manière transparente vous codez tranquillement sur Windows, c’est VSCode qui s’occupe de vous relier à WSL 👍
En ce qui concerne l’utilisation de VSCode en lui même…Google est toujours votre ami 🧐
Voilà ! Vous avez maintenant votre Windows de tout les jours dans lequel vous pouvez faire du développement dans un environnement virtuel isolé 😎
J’ai essayé d’être le plus simple possible tout en vous ménageant un peu sur certains aspects mais si vous avez des questions sur ce guide, n’hésitez pas.
Sources qui m’ont grandement aidées à rédiger cet article :