Activité pratique

Durée2h30

Consignes globales

Cette activité se déroule en deux parties d’une durée équivalente, à faire dans l’ordre.

La première partie se fait volontairement à l’ancienne : un éditeur de texte basique et un terminal, rien d’autre. L’objectif n’est pas de vous compliquer la vie, mais de vous rendre capable de répondre précisément à la question « où est mon fichier, et depuis où est-il exécuté ? ». C’est la question qui se cache derrière la grande majorité des pannes que vous rencontrerez cette année.

La seconde partie installe l’outillage confortable que vous utiliserez ensuite pendant toute l’année : Visual Studio Code, ses extensions et le gestionnaire de projet uv. Vous y retrouverez, automatisées, exactement les opérations faites à la main dans la première partie.

Important

Pendant toute la première partie, n’ouvrez pas Visual Studio Code (ni PyCharm, ni Spyder, ni un notebook Jupyter). Utilisez uniquement l’éditeur de texte fourni avec votre système et un terminal. Vous installerez l’IDE en seconde partie, et vous comprendrez alors ce qu’il fait pour vous.

Les fiches de cours de la séance contiennent tout ce dont vous avez besoin : gardez-les ouvertes à côté.

Contenu de l’activité

Où est mon script ?

Cette partie s’appuie sur la fiche Exécuter un script Python depuis le terminal.

Savoir quel interpréteur vous utilisez

À faire

Déterminez la version de Python installée sur votre ordinateur. Si aucune n’est installée (ou si trop ancienne), installez Python.

Si Python n’est pas trouvé après installation, démarrez un nouveau terminal puis relancez la commande de vérification. Si cela ne marche toujours pas, vous avez probablement besoin d’ajouter le chemin du répertoire contenant l’interpréteur Python au PATH de votre système. La fiche Installer Python explique comment faire.

Construire votre arborescence à la main

Maintenant que Python est disponible, nous allons préparer un peu votre arborescence de fichiers pour la suite de vos études. Vous pourriez garder tous vos fichiers sur votre bureau ou dans le dossier de téléchargements par exemple, mais vous vous doutez bien que ce n’est pas une très bonne pratique, et que vous allez vous y perdre rapidement.

Nous vous suggérons de créer une arborescence de dossiers qui vous permettra de ranger vos fichiers de manière organisée. Par exemple, vous pouvez créer un dossier imt à la racine de votre dossier personnel, puis un dossier s5 dans imt, puis des dossier info/maths/physique/etc. dans s5, puis des dossiers pour chaque cours dans le dossier de la matière correspondante. Ce n’est pas grave d’avoir des dossiers imbriqués (au contraire, ça aide à s’y retrouver). En revanche, ce qui est important, c’est de savoir où vous vous situez exactement.

Vous allez créer les dossiers de travail depuis le terminal, et non depuis l’explorateur de fichiers. C’est un peu plus lent, mais vous saurez exactement où ils se trouvent.

À faire

Placez-vous à l’endroit où vous rangez vos documents de cours (dans l’exemple ci-dessous, Documents, mais choisissez ce qui vous convient), puis créez l’arborescence suivante :

Documents/
|-- imt/
    |-- s5/
        |-- info/
            |-- env/
                |-- session2/
            |-- prog/
            |-- algo/
            |-- projet/
        |-- maths/
        |-- physique/

Pour cela, vous aurez besoin des commandes suivantes :

  • Pour se déplacer dans le terminal :

    cd le\chemin\où\vous\voulez\aller
    cd le\chemin\où\vous\voulez\aller
    cd le/chemin/où/vous/voulez/aller
    cd le/chemin/où/vous/voulez/aller
  • Pour créer un dossier (dans le dossier courant) :

    mkdir nom_du_dossier
    New-Item -ItemType Directory -Path nom_du_dossier -Force
    mkdir nom_du_dossier
    mkdir nom_du_dossier

Écrire un script avec un éditeur de texte

Nous allons créer un fichier Python simple, nommé hello.py, contenant une seule ligne de code, affichant un message.

À faire

Suivez les étapes ci-dessous :

  1. Ouvrez l’éditeur de texte de base de votre système :

    L’application Notepad (Bloc-notes).

    L’application Gedit (ou Text Editor), ou nano directement dans le terminal.

    L’application TextEdit. Une fois ouverte, allez dans le menu Format et choisissez « Convertir au format texte » avant de taper quoi que ce soit : le format RTF n’est pas du texte brut.

  2. Écrivez-y la ligne suivante, et rien d’autre :

    print("Hello World!")
  3. Enregistrez le fichier sous le nom hello.py dans le dossier Documents/imt/s5/info/env/session2/ (référez vous à votre arborescence créée plus haut).

Exécuter le script depuis trois endroits différents

À faire

Essayez d’exécuter le script via le terminal depuis chacun des dossiers suivants :

  • Depuis le dossier Documents/imt/s5/info/env/session2/.
  • Depuis le dossier Documents/imt/s5/info/env/.
  • Depuis le dossier Documents/imt/s5/maths/.

Notez que le dernier est un peu plus compliqué à exécuter que les autres, car le fichier n’est pas situé dans le dossier maths. Pour cela, deux solutions :

  1. Adressage relatif — Vous pouvez utiliser les notations .. pour désigner le dossier parent. Ainsi, si vous êtes dans Documents/imt/s5/maths/, .. désigne Documents/imt/s5/. Et si vous voulez trouver le fichier hello.py, vous devez utiliser le chemin ../info/env/session2/hello.py.

  2. Adressage absolu — Vous pouvez utiliser le chemin absolu du fichier, qui est :

    python C:/Users/Bastien/Documents/imt/s5/info/env/session2/hello.py
    python /home/bastien/Documents/imt/s5/info/env/session2/hello.py
    python /Users/bastien/Documents/imt/s5/info/env/session2/hello.py

    Avec ce format, on donne l’adresse complète depuis la racine du disque, pas relative au dossier courant.

Le vrai piège : les chemins utilisés par le script lui-même

Jusqu’ici, seul l’emplacement du script comptait. Regardons ce qui se passe quand le programme lit lui-même un fichier. Pour cela, créons un nouveau script, qui fera la moyenne de nombres contenus dans un fichier.

  1. Avec votre éditeur de texte, créez le fichier mesures.txt dans le dossier session2. Ce fichier contiendra trois nombres, un par ligne :

    12
    7
    21
  2. Créez, dans session2, un fichier moyenne.py contenant :

    with open("mesures.txt") as fichier:
        valeurs = [float(ligne) for ligne in fichier]
    
    print(f"{len(valeurs)} valeurs, moyenne = {sum(valeurs) / len(valeurs)}")
À faire

À présent, exécutez ce script depuis les trois emplacements suivants :

  • Depuis le dossier Documents/imt/s5/info/env/session2/.
  • Depuis le dossier Documents/imt/s5/info/env/.
  • Depuis le dossier Documents/imt/s5/maths/.

Que remarquez vous ?

Le chemin mesures.txt écrit dans le code est lui aussi un chemin relatif, et il est résolu par rapport au répertoire courant du terminal, pas par rapport au dossier où le script est rangé.

Retenez la formulation : un chemin relatif ne dit pas « à côté du script », il dit « à partir de là où on se trouve ». Voilà pourquoi un programme peut marcher chez vous et échouer chez un(e) camarade, ou marcher hier et échouer aujourd’hui, sans qu’une seule ligne ait changé.

À faire

Corrigez moyenne.py pour qu’il fonctionne quel que soit le répertoire courant, en calculant le chemin du fichier de données à partir de l’emplacement du script.

Puis réessayez depuis les trois mêmes emplacements que précédemment.

Pour cela, vous pouvez utiliser le code ci-dessous :

from pathlib import Path

dossier_du_script = Path(__file__).parent
chemin = dossier_du_script / "mesures.txt"

with open(chemin) as fichier:
    valeurs = [float(ligne) for ligne in fichier]

print(f"{len(valeurs)} valeurs, moyenne = {sum(valeurs) / len(valeurs)}")

Un environnement de travail efficace

Cette partie s’appuie sur les fiches Les environnements de développement intégrés et VS Code et Gestion moderne de projet Python avec uv.

Installer VS Code et l’extension Python

Ce que nous avons fait dans la première partie est ce que les programmeurs ont fait pendant des décennies. Bien évidemment, nous disposons aujourd’hui d’outils bien plus sophistiqués, que nous allons découvrir ensemble. Nous avons choisi de privilégier VS Code, car il fait partie des outils les plus utilisés dans le monde du développement logiciel.

En deux mots, VS Code est un IDE, c’est à dire un logiciel qui intègre plusieurs fonctionnalités pour faciliter le développement logiciel, comme un éditeur de code, un terminal, des agents IA, des outils de débogage, etc.

À faire
  1. Installez Visual Studio Code en suivant la procédure de votre système décrite dans la fiche de cours.
  2. Lancez l’application, puis repérez les cinq zones de l’interface décrites dans la fiche.
  3. Ouvrez le panneau des extensions (Ctrl+Shift+X / Cmd+Shift+X), recherchez l’extension Python publiée par Microsoft, et installez-la.

À présent, nous allons ouvrir votre dossier Documents/s5/info dans VS Code.

Important

Il y a plusieurs moyens d’ouvrir vos fichiers dans VS Code :

  • Fichier seul — Comme pour les éditeurs de texte basiques, vous pouvez ouvrir juste un fichier.
  • Dossier — Vous pouvez ouvrir un dossier entier, et VS Code affichera l’explorateur de fichiers dans la colonne de gauche.
  • Workspace — Un workspace est une collection de dossiers, pas nécessairement au même endroit sur votre disque dur.

Dans le cadre de ce cours, vous travaillerez toujours avec des dossiers.

Ouvrir un dossier permet à VS Code de vous suggérer l’utilisation de fonctions existantes, et de détecter l’environnement virtuel à utiliser. C’est donc le choix à privilégier.

À faire

Ouvrez le dossier Documents/s5/info dans VS Code.

Utiliser uv pour les projets

Avant d’écrire des scripts, nous allons installer un outil permettant de bien gérer nos projets python : uv. Cet outil permet notamment de gérer les dépendances de nos projets (c’est-à-dire les bibliothèques Python utilisées) et les environnements virtuels (qui permettent de gérer les dépendances de manière isolée pour chaque projet).

Installer uv
À faire
  1. Installez uv en suivant la procédure de la fiche de cours.
  2. Fermez puis rouvrez votre terminal, pour que la nouvelle valeur du PATH soit prise en compte.
  3. Vérifiez l’installation avec uv --version.
Initialiser un projet

Maintenant que uv est installé, nous allons l’utiliser pour créer un projet. Dans le cadre de ce cours, vous travaillerez toujours avec des projets créés avec uv. C’est un bon réflexe à prendre, car uv gérera quasiment tout pour vous (environnements virtuels, dépendances, etc.).

À faire

Dans un terminal, placez-vous dans votre dossier imt/info/env/session2 et créez un dossier nommé tuto_uv. Placez-vous dans ce nouveau dossier, puis initialisez le projet avec la commande ci-dessous.

uv init --no-package
uv init --no-package
uv init --no-package
uv init --no-package

Depuis l’arborescence de fichiers dans VS Code, explorez les fichiers créés par uv dans votre dossier tuto_uv. Vous devriez voir apparaître les fichiers suivants nécessaires à uv (ne pas se préoccuper des éventuels fichiers supplémentaires pour le moment) :

  • .python-version : définit la version de Python à utiliser pour le projet.
  • pyproject.toml : fichier de configuration du projet.
  • main.py : fichier principal du projet.
  • README.md : fichier descriptif du projet.

Vous pouvez dès à présent exécuter le fichier main.py :

  • Soit dans votre terminal avec la commande suivante :

    uv run python main.py
    uv run python main.py
    uv run python main.py
    uv run python main.py
  • Soit dans VS Code directement, en ouvrant main.py et en cliquant sur le bouton “▷” en haut à droite.

Ajouter des dépendances

Imaginons que ce nouveau projet ait pour objectif de faire du calcul scientifique. Une bibliothèque Python pratique pour cela est numpy. En Python, pour utiliser une bibliothèque externe, il faut d’abord l’importer.

À faire

Dans le fichier main.py du dossier tuto_uv, ajoutez les lignes suivantes au début du fichier :

import numpy as np

# Affiche la version de numpy installée
print(np.__version__)

Exécutez de nouveau votre programme. Vous devriez obtenir une erreur similaire à celle-ci :

Traceback (most recent call last):
  File "tuto_uv/main.py", line 1, in <module>
    import numpy
ModuleNotFoundError: No module named 'numpy'

L’erreur ModuleNotFoundError signifie que Python n’a pas trouvé la bibliothèque numpy. Il va donc falloir l’installer.

À faire

Dans un terminal, placez-vous dans votre dossier tuto_uv et exécutez la commande ci-dessous.

uv add numpy
uv add numpy
uv add numpy
uv add numpy

Si tout s’est bien passé, uv a créé pour vous les fichiers suivants :

  • .venv : environnement virtuel contenant les bibliothèques Python installées.
  • uv.lock : fichier contenant les versions exactes des bibliothèques installées.

De plus, uv a mis à jour pyproject.toml pour indiquer que votre projet dépend de numpy.

Exécutez à nouveau votre programme. Vous devriez maintenant obtenir la version de numpy installée.

Ouvrir le projet dans VS Code et vérifier l’interpréteur

Cliquez sur main.py dans l’explorateur de fichiers de VS Code. Notez en bas à droite de la fenêtre que VS Code a détecté l’environnement virtuel :

Si ce n’est pas le cas, cliquez sur le bouton et sélectionnez l’interpréteur Python de l’environnement virtuel. Une fois celui-ci sélectionné, VS Code ne soulignera plus en rouge import numpy, car il sait à présent où trouver la bibliothèque numpy.

Remarques importantes

Et voilà, vous avez mis en place un projet avec uv. Cela peut paraître fastidieux la première fois, mais ça devient très vite routinier.

Voici quelques conseils importants pour finir :

  • Dans un projet partagé avec git (sujet de la session suivante), on ne transmet jamais le dossier .venv : il est volumineux et spécifique au système de chaque machine. Seuls pyproject.toml et uv.lock sont partagés.

  • Dans l’UE d’informatique de première année, simplifiez-vous la vie en créant un projet par TP pour les parties algorithmique et programmation. Pour le projet PyRat, vous travaillerez avec un unique projet pour tout le semestre.

  • uv permet bien plus de choses, nous avons choisi ici d’aller au plus direct pour démarrer un projet. En particulier, la commande uv sync permet d’installer toutes les dépendances spécifiées dans uv.lock. C’est très pratique quand on récupère un projet sur GitHub, par exemple.

Pour aller plus loin

Déboguer pas-à-pas

VS Code fournit un débogeur pas-à-pas pour Python, c’est-à-dire un outil qui permet de mettre en pause l’exécution d’un programme et d’inspecter l’état de ses variables.

Pour cela, il faut placer des points d’arrêt dans le code. Un point d’arrêt est une ligne de code à laquelle l’exécution du programme s’arrêtera. Pour ajouter un point d’arrêt, il suffit de cliquer dans la marge à gauche de la ligne de code : un disque rouge apparaît.

Ensuite, lancez le programme en mode débogage (touche F5). L’exécution s’arrêtera au premier point d’arrêt. Vous pouvez alors avancer pas-à-pas (touche F10) ou entrer dans les fonctions (touche F11).

Essayez avec le programme main.py du dossier tuto_uv.

Pour aller encore plus loin

Information

Y a-t-il quelque chose que vous auriez aimé voir ici ? Faites-le nous savoir sur le serveur Discord ! Peut-être pouvons-nous l’ajouter rapidement. Sinon, cela nous aidera à améliorer le cours pour l’année prochaine !