Python : programmer, automatiser et analyser des données
Quitter

Leçon 1 sur 14 · Les bases du langage

Python : installation, interpréteur, premier script, venv et pip

45 min Python 3.12 (Debian, git, pip)

Objectif

Mettre en place un poste de travail Python propre : savoir quel Python est installé, discuter avec l'interpréteur, écrire un premier script et le lancer, puis donner à chaque projet son propre environnement virtuel pour installer des bibliothèques avec pip sans casser le système.

L'essentiel

  • Python est un langage interprété : pas de compilation à lancer, on écrit un fichier .py et on l'exécute avec python3 fichier.py.
  • L'interpréteur interactif (python3 seul, invite >>>) sert à essayer une idée en quelques secondes.
  • Sous Linux, utilisez python3 ; sous Windows, le lanceur py. Vérifiez toujours la version avec python3 --version.
  • Un environnement virtuel (python3 -m venv .venv) est un dossier qui contient un Python et des paquets propres à un projet.
  • On installe des paquets avec python -m pip install … dans l'environnement activé, jamais avec sudo pip.

1. Pourquoi Python ?

Python est apprécié parce qu'il se lit presque comme de l'anglais simple et qu'il est livré avec une bibliothèque standard très riche (fichiers, dates, JSON, CSV, HTTP, compression, bases SQLite…). Le même langage sert à :

  • l'administrateur qui remplace un script shell de 300 lignes par 60 lignes lisibles ;
  • le développeur qui écrit une API web pour une application de livraison à Casablanca ;
  • l'analyste qui transforme chaque mois l'export Excel des ventes d'une coopérative en rapport clair.

Le langage doit son nom aux humoristes anglais des Monty Python, pas au serpent. Le tutoriel officiel en fait d'ailleurs un clin d'œil permanent.

2. Installer Python

Sous Linux

La plupart des distributions fournissent déjà Python 3 : beaucoup d'outils système en dépendent. Vérifiez :

python3 --version          # ex. Python 3.12.3
which python3              # /usr/bin/python3

S'il manque, installez-le avec le gestionnaire de paquets de votre distribution, ainsi que le module des environnements virtuels :

# Debian / Ubuntu
sudo apt install python3 python3-venv python3-pip

# Rocky / Alma / RHEL
sudo dnf install python3 python3-pip

Ne supprimez jamais le Python du système et ne remplacez pas /usr/bin/python3 par une autre version : dnf, apt ou des outils comme firewalld s'appuient dessus.

Sous Windows

Installez Python depuis le site officiel (python.org) ou le Microsoft Store. La commande à retenir est le lanceur py :

py --version
py -3.12 script.py         # choisir une version précise si plusieurs sont installées

Pendant l'installation depuis python.org, cochez l'option qui ajoute Python au PATH.

Quelle version ?

Utilisez une version 3.x récente et maintenue (3.12 dans nos labs). Python 2 est mort depuis 2020 : si un vieux tutoriel écrit print "bonjour" sans parenthèses, il date de cette époque.

3. L'interpréteur interactif

Tapez python3 sans argument :

$ python3
Python 3.12.3 (main, …) [GCC …] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 + 3
5
>>> 1500 * 1.20          # le prix TTC d'un article à 1 500 DH HT
1800.0
>>> "Rabat".upper()
'RABAT'
>>> help(len)            # l'aide intégrée ; touche q pour sortir
  • >>> est l'invite principale, ... apparaît quand une instruction continue sur plusieurs lignes (après un if ou un for) ;
  • en mode interactif, la valeur d'une expression s'affiche toute seule ; dans un script, il faut print() ;
  • pour sortir : Ctrl-D sous Linux, Ctrl-Z puis Entrée sous Windows, ou quit().

Deux autres façons de lancer l'interpréteur sont très utiles en administration :

python3 -c 'print(19 * 1.2)'        # exécuter une petite instruction
python3 -m http.server 8000         # lancer un module de la bibliothèque comme un programme
python3 -i script.py                # exécuter le script puis rester en mode interactif

4. Le premier script

Un script est un simple fichier texte en UTF-8 avec l'extension .py. Créez facture.py :

# facture.py — calcul d'une facture simple
print("Coopérative Tifaout — facture")
prix_ht = 250
print("Prix TTC :", prix_ht * 1.20, "DH")

Lancez-le :

python3 facture.py
# Coopérative Tifaout — facture
# Prix TTC : 300.0 DH

Remarques :

  • le # commence un commentaire, ignoré par Python ;
  • Python lit le fichier de haut en bas et exécute chaque ligne dans l'ordre ;
  • l'indentation compte : une ligne ne doit pas commencer par des espaces sans raison (vous verrez pourquoi avec les conditions). Réglez votre éditeur sur 4 espaces, jamais de tabulations mélangées.

Recevoir des arguments

Le module sys donne accès aux arguments de la ligne de commande :

# salut.py
import sys
print("Bonjour", sys.argv[1])
python3 salut.py Youssef      # Bonjour Youssef

sys.argv[0] est le nom du script, sys.argv[1] le premier argument, etc. (leçon 3.1 : le module argparse fait cela proprement).

5. Rendre un script exécutable

Sous Linux, on peut lancer un script comme une commande, sans écrire python3 devant. Il faut deux choses :

  1. une première ligne shebang qui indique l'interpréteur ;
  2. le droit d'exécution.
#!/usr/bin/env python3
print("Sauvegarde du serveur web…")
chmod +x sauvegarde.py
./sauvegarde.py

#!/usr/bin/env python3 cherche python3 dans le PATH : c'est plus portable que #!/usr/bin/python3, et cela respecte l'environnement virtuel activé. Attention, le fichier doit avoir des fins de ligne Unix (LF) : un fichier enregistré sous Windows (CRLF) provoque l'erreur /usr/bin/env: 'python3\r': No such file or directory.

6. Les environnements virtuels

Le problème

Le site de réservation d'un riad utilise la version 1 d'une bibliothèque ; l'outil de facturation, sur le même serveur, exige la version 2. Avec une seule installation de Python, l'un des deux casse. Et installer des paquets dans le Python du système risque de casser des outils de la distribution.

La solution : un dossier par projet

cd ~/projets/facturation
python3 -m venv .venv            # crée le dossier .venv
source .venv/bin/activate        # Linux / macOS
# .venv\Scripts\activate         # Windows
(.venv) $ which python
/home/sara/projets/facturation/.venv/bin/python
(.venv) $ deactivate             # revenir au Python du système
  • venv copie (ou relie) l'interpréteur avec lequel vous l'avez lancé : python3.12 -m venv .venv donne un environnement 3.12 ;
  • le nom .venv est la convention : caché, explicite, et il ne se confond pas avec un fichier .env de configuration ;
  • activer un environnement modifie seulement le shell courant (le PATH et l'invite) ;
  • sans activer, on peut appeler directement .venv/bin/python script.py : c'est ce qu'on fait dans une tâche cron ou une unité systemd ;
  • le dossier .venv ne se copie pas d'une machine à l'autre et ne va jamais dans Git (ajoutez-le à .gitignore).

Pour savoir, depuis Python, si l'on est dans un environnement virtuel :

import sys
print(sys.prefix)          # le dossier de l'environnement
print(sys.base_prefix)     # le Python d'origine ; différent de sys.prefix dans un venv

7. Installer des paquets avec pip

pip télécharge les paquets depuis le PyPI (Python Package Index). Utilisez la forme python -m pip : vous êtes sûr d'utiliser le pip du Python actif.

(.venv) $ python -m pip install requests              # dernière version
(.venv) $ python -m pip install "requests==2.32.3"    # version précise
(.venv) $ python -m pip install --upgrade requests    # mettre à jour
(.venv) $ python -m pip list                          # paquets installés
(.venv) $ python -m pip show requests                 # détails d'un paquet
(.venv) $ python -m pip uninstall requests

requirements.txt

Pour qu'un collègue (ou le serveur de production) retrouve exactement les mêmes versions :

(.venv) $ python -m pip freeze > requirements.txt     # figer les versions
(.venv) $ cat requirements.txt
certifi==2024.8.30
requests==2.32.3
…
# sur l'autre machine :
(.venv) $ python -m pip install -r requirements.txt

requirements.txt va dans Git, le dossier .venv non.

L'erreur « externally-managed-environment »

Sur Debian 12, Ubuntu 23.04 et plus récents, pip install hors environnement virtuel est refusé avec le message externally-managed-environment. Ce n'est pas un bug : la distribution protège son Python. La bonne réponse est de créer un venv, pas d'ajouter --break-system-packages.

8. Un éditeur

N'importe quel éditeur de texte suffit, mais un éditeur qui comprend Python vous fera gagner beaucoup de temps : coloration, indentation automatique à 4 espaces, détection des erreurs. VS Code (avec l'extension Python) et PyCharm Community sont gratuits. Sur un serveur, vim ou nano suffisent pour de petits scripts.

Pièges fréquents

  • python contre python3 : sur beaucoup de Linux, python n'existe pas ou désigne autre chose. Écrivez python3 (ou python seulement dans un venv activé).
  • Installer avec sudo pip install : vous modifiez le Python du système et risquez de casser des outils. Toujours un venv.
  • Oublier d'activer le venv : le paquet s'installe ailleurs et import requests échoue avec ModuleNotFoundError. Vérifiez avec which python.
  • Mélanger tabulations et espaces : erreur TabError ou IndentationError. 4 espaces, partout.

Lab

Votre lab tourne sur une machine avec Python 3.12 et sa bibliothèque standard, sans accès à Internet (donc pas de pip install d'un paquet distant). Vous allez :

  1. écrire /root/bonjour.py, votre premier script ;
  2. le rendre exécutable avec un shebang et chmod +x ;
  3. écrire /root/version.py qui lit la version via sys.version_info ;
  4. créer l'environnement virtuel /root/projet/.venv ;
  5. prouver que vous utilisez bien le pip de cet environnement.

Pour écrire un fichier sans éditeur :

cat > /root/bonjour.py <<'EOF'
print("Marhaba, MasterLinux !")
EOF

Quiz

  1. Quelle commande lance l'interpréteur interactif sous Linux ? Et sous Windows ?
  2. Que fait la ligne #!/usr/bin/env python3 en haut d'un script ?
  3. Pourquoi créer un environnement virtuel par projet ?
  4. Pourquoi écrire python -m pip install plutôt que pip install ?
  5. Quel fichier permet de réinstaller exactement les mêmes versions de paquets sur un autre serveur, et quel dossier ne faut-il jamais mettre dans Git ?
Réponses
  1. python3 sous Linux ; py (le lanceur) sous Windows.
  2. C'est le shebang : quand le script est lancé directement (./script.py, avec le droit d'exécution), le système utilise le python3 trouvé dans le PATH pour l'exécuter.
  3. Pour que chaque projet ait ses propres versions de bibliothèques, sans conflit entre projets et sans toucher au Python du système.
  4. Parce que python -m pip utilise à coup sûr le pip de l'interpréteur actif (celui du venv), alors que la commande pip peut désigner un autre Python.
  5. requirements.txt (produit par python -m pip freeze) ; le dossier .venv ne va jamais dans Git.

Sources de référence : tutoriel officiel Python en français (licence PSF). Texte original MasterLinux.

Exercices pratiques

À réaliser sur Python 3.12 (Debian, git, pip)

Le terminal en ligne ouvre bientôt. En attendant, réalisez ces tâches sur votre machine Linux, une machine virtuelle ou WSL.

  1. Créez le script /root/bonjour.py qui affiche exactement : Marhaba, MasterLinux !
    Afficher un indiceUne seule ligne suffit : print("Marhaba, MasterLinux !"). Écrivez-la avec echo ou cat > /root/bonjour.py <<'EOF'.
    Voir la solution
    printf '%s\n' 'print("Marhaba, MasterLinux !")' > /root/bonjour.py

    Vérification : test -f /root/bonjour.py && test "$(python3 /root/bonjour.py)" = "Marhaba, MasterLinux !"

  2. Rendez ce script exécutable directement : la commande /root/bonjour.py (sans écrire python3 devant) doit afficher le même message. Il faut une ligne shebang et le droit d'exécution.
    Afficher un indicePremière ligne : #!/usr/bin/env python3 — puis chmod +x /root/bonjour.py.
    Voir la solution
    printf '%s\n' '#!/usr/bin/env python3' 'print("Marhaba, MasterLinux !")' > /root/bonjour.py && chmod +x /root/bonjour.py

    Vérification : test -x /root/bonjour.py && head -n 1 /root/bonjour.py | grep -q "^#!.*python3" && test "$(/root/bonjour.py)" = "Marhaba, MasterLinux !"

  3. Créez /root/version.py qui affiche la version de l'interpréteur sous la forme « Python 3.12 » (majeure.mineure seulement), en lisant sys.version_info : le résultat doit rester juste si l'interpréteur change.
    Afficher un indiceimport sys puis print(f"Python {sys.version_info.major}.{sys.version_info.minor}") — n'écrivez pas 3.12 en dur.
    Voir la solution
    printf '%s\n' 'import sys' 'print(f"Python {sys.version_info.major}.{sys.version_info.minor}")' > /root/version.py

    Vérification : test -f /root/version.py && ! grep -q "3\.12" /root/version.py && test "$(python3 /root/version.py)" = "$(python3 -c 'import sys; print("Python %d.%d" % sys.version_info[:2])')"

  4. Créez un environnement virtuel dans /root/projet/.venv (le dossier /root/projet n'existe pas encore).
    Afficher un indicemkdir -p /root/projet puis python3 -m venv /root/projet/.venv
    Voir la solution
    mkdir -p /root/projet && python3 -m venv /root/projet/.venv

    Vérification : test -x /root/projet/.venv/bin/python && /root/projet/.venv/bin/python -c 'import sys; sys.exit(0 if sys.prefix != sys.base_prefix else 1)'

  5. Enregistrez dans /root/projet/pip.txt la sortie de la commande « pip --version » DE L'ENVIRONNEMENT VIRTUEL (pas celle du système) : on doit y lire le chemin /root/projet/.venv.
    Afficher un indice/root/projet/.venv/bin/python -m pip --version > /root/projet/pip.txt (ou activez d'abord l'environnement avec source).
    Voir la solution
    /root/projet/.venv/bin/python -m pip --version > /root/projet/pip.txt

    Vérification : test -f /root/projet/pip.txt && grep -q "^pip " /root/projet/pip.txt && grep -q "/root/projet/.venv" /root/projet/pip.txt

Références officielles consultées : Mise en bouche — https://docs.python.org/fr/3/tutorial/appetite.html ; Mode d'emploi de l'interpréteur Python — https://docs.python.org/fr/3/tutorial/interpreter.html ; Environnements virtuels et paquets — https://docs.python.org/fr/3/tutorial/venv.html ; Annexe (mode interactif, scripts exécutables) — https://docs.python.org/fr/3/tutorial/appendix.html. Texte original MasterLinux.