Cours Complet - PYTHON
Cours Complet - PYTHON
PYTHON
Présenté par :
Mr. Sény Mbaye
Doctorant à ED2DS
[email protected]
www.mesprofs.com
Présentation du Formateur
plt.plot([1, 2, 3, 4, 5])
plt.show()
Quelques commandes à connaître
● pip list ou pip freeze ( Pour vérifier les paquets Python que vous avez installés)
● pip show <package(s)> ( vous montre des informations utiles sur un ou plusieurs
paquets que vous avez installés)
○ exemples :
○ pip show requests
pip show requests numpy pandas
● Exercice 1
S'il s'exécute correctement dès la première fois, c'est parfait, vous n'avez pas besoin d'essayer
autre chose ! Cependant, si ce n'est pas le cas, vous allez devoir rechercher dans PyPI les
paquets que vous devez installer, puis exécuter le script correctement !
Importer des paquets et modules python
● import <module>
○ Exemple : (afficher le répertoire de travail actuel) ⇒ script.py
import os
print(os.getcwd())
○ ou (Pour importer uniquement les fonctionnalités dont nous avons besoin)
from os import getcwd
print(getcwd())
● Nous importons des paquets dans des fichiers Python de la même façon que nous importons des
modules de la bibliothèque standard
○ Par exemple, nous pouvons nous servir du paquet numpy pour arrondir les nombres à l'entier
inférieur ou supérieur
pip install numpy import numpy
number_rounding.py print(numpy.ceil(1.2)) C:\> python number_rounding.py
print(numpy.ceil(1.933)) 2.0
2.0
print(numpy.floor(1.2)) 1.0
Importez tout le contenu d’un paquet Python
● Une alternative à l'utilisation de la syntaxe import <package> consiste à importer tout le contenu d'un
paquet à l'aide de la commande from <package> import *
● Exemple :
○ A partir du shell Python : from numpy import * (tout le contenu du paquet numpy)
○ Maintenant, nous pouvons utiliser les méthodes ceil() et floor() sans avoir besoin du préfixe
numpy.
● Bien que l'utilisation de from <package> import * dans le shell Python soit correcte, elle n'est pas
considérée comme une bonne pratique dans le code d'une application. Si vous utilisez from
<package_a> import * et from <package_b> import * , et qu'un conflit de noms se produise
entre les fonctionnalités de package_a et de package_b , cela peut entraîner des conséquences
indésirables.
● Alias de paquets : import <package> as <alias>
● Exemple :
import numpy as np
On peut reprendre notre exemple précédent.
Utiliser le système de versionning de paquets
Les paquets Python sont "versionnés" pour faciliter le suivi des versions de chacun. Les
versions des paquets Python, toutefois, sont gérées selon un format strict :
major.minor.patch (où major , minor et patch sont tous des nombres entiers.)
● Par exemple, à l'heure actuelle, la dernière version du paquet requests est 2.24.0
● Chaque fois qu'un changement est apporté à un paquet Python, le numéro de version change (quelle
que soit l'importance de la modification). Les modifications sont réparties en trois catégories différentes
:
○ patch est incrémenté : correction de bug rétrocompatible
○ minor est incrémenté : nouvelle fonctionnalité rétrocompatible
○ major est incrémenté : « breaking change », ce qui signifie que le changement de version peut
“casser” un script Python donné, et il sera nécessaire de réécrire ce dernier en tenant compte des
changements apparus dans la nouvelle version du paquet.
● Le moyen le plus simple pour installer une version de paquet Python consiste à utiliser l'opérateur == .
Par exemple, pip install requests==2.1.0
Exercice 2
Votre responsable a effectué des analyses à l'aide de Python. Il a écrit un script qui utilise deux
paquets Python : matplotlib version 3.2.2 et numpy version 1.19.0 .
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y)
plt.title('Scatter Diagram')
plt.show()
● Définition :
○ Chaque environnement virtuel comprend sa propre version de Python et tous les
paquets Python que vous décidez d'y installer.
○ Pour garantir que vous disposiez des bons paquets (notamment de leurs versions
spécifiques) au sein de votre environnement de développement local lorsque vous
passez d'un projet à l'autre, nous utilisons des environnements virtuels.
● Outils de création d’environnements virtuels
○ venv est une nouveauté de Python 3.3, vous pourrez donc l'exploiter à condition
d'utiliser une version à jour de Python !
○ python -m venv --help (vérifier que vous avez accès à venv en saisissant dans
votre terminal)
Création d’un environnement virtuel (1)
● D’abords quand on utilise pas d’environnement virtuel
Il vous a toutefois envoyé un dossier contenant le projet sur lequel il a travaillé. Vos tâches seront les suivantes
:
● Télécharger le dossier et les fichiers, puis les placer dans votre dossier de projets : p2c2s2_script.py.
● Créer un environnement virtuel.
● La première fois que vous tenterez d'exécuter l'application, elle échouera.
● Trouver et installer les paquets dont vous pensez avoir besoin.
● Exécuter l'application avec succès.
Travailler avec plusieurs environnements (1)
● Créez un deuxième environnement virtuel pour une autre application
cd projects/
mkdir demo-app-2
dir ou ls (pour afficher les deux projets)
● Passons dans le répertoire demo-app-2 et créons un script appelé demo.py : cd demo-app-2
import matplotlib.pyplot as plt
import numpy as np
plt.figure()
plt.plot([1, 2, 3, 4, 5], [10, 20, 30, 40, 50])
plt.show()
● Comme pour le premier projet (demo-app ), si vous tentez d'exécuter le script, il pourra s'exécuter
correctement ou échouer, selon que matplotlib et numpy sont installés ou pas parmi les paquets
globaux. Si matplotlib n'a pas été installé globalement
● Rappelons-nous qu’il ne faut installer que le strict minimum de paquets globaux, mais qu'il faut plutôt
les installer dans l'environnement virtuel propre à chaque projet.
● python -m venv env
● source env/bin/activate ou env\Scripts\activate.bat sur windows & pip freeze (pour vérifier)
● pip install matplotlib
● python demo.py
Travailler avec plusieurs environnements (2)
● Basculez entre plusieurs environnements virtuels
○ Imaginons maintenant que nous souhaitions basculer rapidement entre nos applications
demo-app et demo-app-2 . Pour l'instant, l'environnement virtuel de demo-app-2 est activé.
Commençons par le désactiver : deactivate
○ Passons maintenant dans le répertoire demo-app et activons son environnement virtuel :
cd ../demo-app
source env/bin/activate ou env\Scripts\activate.bat (windows)
○ pip freeze
○ même process pour demo-app2
○ Vous noterez que le (env) ajouté à l'invite de commande reste cohérent lorsque nous passons
de l'environnement virtuel de demo-app à celui de demo-app-2 . C'est parce que les
environnements virtuels ont tous les deux le même nom (env ). Nous verrons ce point de façon
plus détaillée dans la prochaine section
Exercice 4
Vous travaillez cette fois encore dans une agence de vente et de marketing en tant que spécialiste du
marketing. Votre patron a travaillé sur deux projets Python différents, mais il veut à présent que vous en
preniez la responsabilité. Malheureusement, il n'est pas au bureau aujourd'hui !
Il vous a toutefois envoyé un dossier compressé contenant les projets sur lesquels il a travaillé. Vos tâches
seront les suivantes :
● Télécharger les dossiers et les fichiers des deux projets et les placer dans votre dossier de projets :
https://s3-eu-west-1.amazonaws.com/course.oc-static.com/courses/6900846/p2c3s2_exercise.zip .
● Créer un environnement virtuel pour chaque projet.
● La première fois que vous tenterez d'exécuter chacune des applications, elle échouera.
● Trouver et installer les paquets dont vous pensez avoir besoin pour exécuter chaque application.
● Exécuter chaque application.
● Vous entraîner à passer d'un environnement virtuel à l'autre et à exécuter chaque application.
Nommons nos environnements virtuels
● Options de nommage d'un environnement virtuel
○ nous avons jusqu'ici appelé nos environnements virtuels de la même manière pour les deux
projets : env (Au début, cela peut prêter à confusion)
○ Pourquoi ne donnons-nous pas à nos environnements virtuels un nom spécifique ?
○ Si vous basculez très vite entre un grand nombre de projets ou de répertoires différents, il est
pratique de pouvoir toujours activer votre environnement virtuel avec source
env/bin/activate plutôt que d'utiliser ls pour répertorier les fichiers ou les répertoires à la
racine de votre projet afin de retrouver (ou de vous rappeler) le nom de l'environnement virtuel,
puis d'exécuter source <env name>/bin/activate pour l'activer.
○ Une autre question souvent posée est "Pourquoi ne pas appeler notre environnement virtuel par
le nom du projet auquel il est associé ?". La réponse est très simple : cela crée un conflit de noms
de répertoires, ce qui est souvent source de confusion.
Gestion des environnements virtuels à l’aide du fichier
requirements.txt
Pour garantir que tous les développeurs travaillant sur un projet utilisent le même environnement virtuel,
nous utilisons un fichier requirements.txt . Il s'agit de la liste des paquets Python dont l'installation est
requise dans un environnement virtuel pour que l'application s'exécute correctement.
● Tout d'abord, téléchargez le script et ce fichier requirements.txt. Placez le projet demo-app-3 dans votre dossier
projects . Depuis votre terminal, placez-vous dans demo-app-3 et vérifiez-en le contenu
● Vérifions maintenant le contenu des deux fichiers
● Notez que dans demo.py , nous utilisons deux paquets : requests et bs4 . Ces deux paquets, ainsi que leurs
versions, sont répertoriés de manière explicite dans requirements.txt
● À ce stade, vous pouvez essayer d'exécuter demo.py à l'aide de Python. Si requests et bs4 sont installés
globalement (dans l'idéal, ce n'est pas le cas), le script s'exécutera correctement. Toutefois, même dans ce cas,
vous ne pouvez pas savoir si le script s'exécute exactement de la façon prévue par l'auteur du projet, car vous
utilisez peut-être des versions de requests et bs4 différentes de celles spécifiées dans requirements.txt .
● Pour garantir que vous avez la même configuration que les autres développeurs qui travaillent sur le projet,
nous utilisons un environnement virtuel. D'abord, créez et activez un environnement virtuel :
python -m venv env
source env/bin/activate Ensuite, nous devons installer les paquets Python répertoriés dans le fichier
requirements.txt . Pour ce faire, nous utilisons la commande suivante : pip install -r requirements.txt
● pip freeze (vous constatez que vous avez correctement installé requests et bs4 , ainsi que certaines de
leurs dépendances)
● Vous pouvez enfin exécuter le script demo.py correctement : python demo.py
Exercice 5
● Tâche 1
Vous occupez un poste au service des ventes, et un membre de votre équipe travaille sur un projet Python et voudrait le
partager avec vous.
Votre tâche consiste à créer un environnement virtuel, installer les paquets requis répertoriés dans le fichier
requirements.txt et exécuter l'application : que fait-elle ?
● Tâche 2
Un autre membre de votre équipe travaille sur un autre projet Python, mais n'est pas aussi expérimenté que vous. Son projet ne
contient pas de fichier requirements.txtƒ.
Voyez si vous pouvez faire en sorte qu'il s'exécute dans un environnement virtuel. Vous aurez peut-être besoin d'examiner son code
pour savoir quels paquets vous devez installer. Une fois que vous aurez exécuté l'application correctement, créez un fichier
requirements.txt pour que quelqu'un d'autre puisse travailler sur le projet au besoin. Une fois que vous aurez terminé, vous
pourrez tester le fonctionnement de votre fichier requirements.txt de la façon suivante : supprimez votre environnement
virtuel, créez-en un autre, utilisez votre fichier requirements.txt pour installer les paquets Python, puis exécutez l'application.
Supprimer les environnements virtuels
● Pourquoi supprimer des environnements virtuels ?
○ Il existe de nombreuses raisons de vouloir supprimer un environnement virtuel :
■ Vous ne travaillez plus sur un projet, donc vous voulez supprimer les fichiers du projet et
l'environnement virtuel associé.
■ Lorsque vous avez créé l'environnement virtuel, vous avez fait une faute en le nommant :
vous voulez recréer l'environnement virtuel avec un nom correct.
■ Vous avez des difficultés à exécuter votre application, pour une raison quelconque. Afin
d'écarter la possibilité d'un problème lié à votre environnement virtuel, vous voulez
rapidement recréer celui-ci à partir de zéro.
○ Quelle que soit la raison pour laquelle vous voulez supprimer un environnement virtuel, vous allez
pouvoir le faire en un rien de temps !
● Pour supprimer un environnement virtuel, il suffit de supprimer son répertoire :
○ cd projects/demo-app
rm -r env/
ou supprimer le dossier sur windows
Choisissons l’éditeur le plus approprié pour notre cas
● Utilisez un éditeur de texte/code
○ Lors d'un projet Python, il est important d'avoir un bon environnement de développement
local, car il vous permet de travailler plus efficacement.
○ Un aspect essentiel de cet environnement de développement local est votre environnement
virtuel. Un autre composant important de votre environnement de développement local est
votre éditeur, l'endroit où vous écrivez réellement votre code.
○ Un éditeur de texte (également appelé éditeur de code), est un programme qui permet d'écrire
et de modifier le code source, mais pas beaucoup plus que ça! Les éditeurs de texte sont
généralement légers et s'exécutent rapidement.
○ Parmi les plus connus, citons Visual Studio Code, Sublime Text et Atom.
● Pourquoi utiliser un IDE ?
○ IDE (Integrated Development Environment). Un IDE contient toutes les fonctionnalités des
éditeurs de texte/code normaux, avec en plus des fonctionnalités très intéressantes. Les IDE
Python, par exemple, proposent notamment les fonctionnalités suivantes : Un terminal de
ligne de commande, Un shell Python interactif, Un débuggeur Python, Une fonctionnalité qui
enregistre automatiquement votre code, puis le déploie sur un serveur/dépôt de votre choix,
La possibilité d'exécuter des tests à l'intérieur de l'IDE, Et bien plus encore !
○ Parmi les IDE, citons, par exemple, Microsoft Visual Studio et PyCharm. Microsoft Visual Studio
et PyCharm proposent tous les deux des éditions ‘Professional’ payantes, mais également des
versions ‘Community’ gratuites n'offrant pas toutes les fonctionnalités possibles
Téléchargeons, installons et exécutons PyCharm
La programmation orientée objet est un paradigme de programmation. Elle est basée sur
l’idée de regroupement des données et des fonctions associées en « îlots » d’informations.
Ces îlots sont appelés des objets.
Quel que soit le paradigme utilisé, les programmes utilisent la même série d’étapes pour
résoudre les problèmes :
1. Entrée de données : Les données sont lues depuis un certain endroit, qui peut être
un stockage de données comme un système de fichiers ou une base de données.
2. Traitement : Les données sont interprétées et éventuellement modifiées afin de les
préparer pour l’affichage.
3. Sortie de données : Les données sont présentées de façon à pouvoir être lues et
être en interaction avec un utilisateur physique ou un système.
POO et programmation procédurale
Le paradigme POO ne diffère pas de ce point de vue. Ce qui le distingue, c’est la façon
dont il considère le monde. Par rapport à la programmation procédurale, la POO prend
du recul. Au lieu de travailler sur les données et de les passer d’une phase à la
suivante, la POO essaie de comprendre le monde dans lequel les données évoluent.
Elle fait cela en modélisant ce qu’elle voit.
Avantages de la POO
Pourquoi utiliser la POO ? Pourquoi ne pas utiliser un autre paradigme ? Pour être
clair, la POO n’est pas meilleure ou pire que n’importe quel autre paradigme. Il y a pour
tout des avantages et des inconvénients. La POO offre des avantages intéressants et
en voici quelques-uns :
Nous allons devoir appliquer certains concepts fondamentaux de la POO, comme les
classes, les objets et l’état. Cette unité explore les parties suivantes :
Imaginons un objet dans le monde réel. Vous êtes dans un parking. Que voyez-vous ? Vous
voyez probablement plusieurs voitures, qui ont des formes, des dimensions et des couleurs
différentes. Pour décrire une voiture, vous pouvez utiliser des propriétés comme la marque,
le modèle, la couleur et le type de voiture. Si vous affectez des valeurs à ces propriétés, il
devient rapidement évident que vous parlez d’une Ferrari rouge, d’une à quatre roues
motrices, d’une Mustang jaune, etc.
Dans une autre scène, imaginez un jeu de cartes à Las Vegas. Vous regardez deux cartes
différentes, qui sont deux objets. Vous réalisez qu’elles ont des propriétés communes, en
l’occurrence la couleur. La couleur pour les objets peut être trèfle, cœur, carreau ou pique.
Leurs valeurs peuvent être as, roi, neuf, etc.
Qu’est-ce qu’une classe ? (1)
Une classe est un type de données qui fait office de définition de modèle pour un
type particulier d’objet.
Vous avez appris qu’un système POO a des objets et que ces objets ont des
propriétés. Il existe un concept similaire à un objet : une classe.
Qu’est-ce donc qu’une classe ? Une classe est un blueprint d’un objet. Alors que
la classe est le blueprint d’une voiture, l’objet est la vraie voiture que vous pouvez
conduire. La classe est ce que vous écrivez dans le code. L’objet est ce que vous
obtenez quand vous indiquez à l’environnement d’exécution d’exécuter votre
code.
Qu’est-ce qu’une classe ? (2)
La façon dont vous allez créer un objet à partir d’une classe est similaire à la façon dont vous créez une voiture à partir
d’un blueprint. Quand vous créez un objet, votre programme demande des ressources au système d’exploitation, c’est-
à-dire de la mémoire, pour pouvoir construire l’objet. À l’inverse, quand une voiture est fabriquée à partir d’un blueprint,
l’usine demande des ressources comme du métal, du caoutchouc et du verre pour pouvoir assembler la voiture.
Classe Objet
Une classe dans Python est créée en utilisant le mot clé class et en lui
attribuant un nom, comme dans cet exemple :
class Car:
Créer un objet à partir d’une classe
Quand vous créez un objet à partir d’une classe, on dit que vous l’instanciez. Ce que
vous faites, c’est demander au système d’exploitation de vous fournir suffisamment de
mémoire pour créer un objet en utilisant ce modèle (la classe) et ces valeurs de
démarrage. « Instancier » est en fait un autre mot pour « créer ».
Pour instancier un objet, vous ajoutez des parenthèses au nom de la classe. Ce que
vous obtenez est un objet que vous pouvez choisir d’affecter à une variable, comme
suit :
car = Car()
Variables dans la POO et variables dans les programmes procéduraux
Dans la programmation procédurale, vous avez l’habitude d’utiliser des variables pour y placer des
informations et faire le suivi de l’état. Vous pouvez définir ces variables partout où vous en avez
besoin dans votre fichier. La variable initialization courante peut se présenter comme suit :
pi = 3.14
Vous avez également des variables dans la POO, mais elles sont attachées aux objets au lieu d’
être définies indépendamment. Vous faites référence aux variables d’un objet en tant qu’attributs.
Quand un attribut est attaché à un objet, il est utilisé de deux façons :
Savoir quels sont les attributs (variables) à ajouter à votre classe fait partie de
la modélisation. Vous avez vu comment créer une classe dans le code, mais
comment lui ajouter un attribut ? Vous devez indiquer à la classe les attributs
qu’elle doit avoir au moment de la construction, quand un objet est instancié.
Il existe une fonction spéciale qui est appelée au moment de la création,
appelée un constructeur.
Constructeur
elevator = Elevator(1)
Utilisation incorrecte de self
class Car:
def __init__():
self.color = "Red" # ends up on the object
make = "Mercedes" # becomes a local variable in the constructor
car = Car()
print(car.color) # "Red"
print(car.make) # would result in an error, `make` does not exist on the object
Si l’objectif était de faire de color et make des attributs de la classe Car, vous devriez modifier le code. Dans le constructeur, vérifiez
que les deux attributs sont affectés à self, comme suit :
self.make = "Mercedes"
Exercice 1
Partie 4 : Code Python Maintenable pour la
Conception d’API
Partie 5 : Framework Django
“La plateforme de développement Web pour les
perfectionnistes sous pression”
Qu'est-ce-que Django ?
1. Facile à installer
2. Fonctionne out of the box
3. Excellente documentation
4. Modèles en Python et ORM efficace (peu de connaissances SQL
requises)
5. Interface d'administration auto-générée
6. Architecture pluggable, nombreux modules existants
7. Gestion de formulaires
8. Serveur de développement standalone
9. Déploiement facile
10. Communauté autour du projet très active
Environnement
● Django : 4.1
● Python : 2.6 / 2.7 / 3.3 / 3.9
● Base de données : SQLite, PostgreSQL, MySQL
● Il est préférable de travailler dans un environnement virtualisé
(virtualenv)
En production
● Derrière Apache, nginx, ...
● Avec mod_wsgi, uWSGI, gunicorn, ...
Architecture MVC, ou plutôt MTV
L'architecture de Django s'inspire du principe MVC (Model, View, Controller) ou
plutôt MTV (Model, Template, View) :
● Model : Un modèle est écrit en Python et Django fournit un ORM (Django ORM)
complet pour accéder à la base de données
● Template : Django possède son propre moteur de template (Django Template
Engine)
● View : Une vue Django définit quelles données sont présentées à l'utilisateur.
Une vue peut être une simple fonction Python retournant une réponse HTTP ou
être basée sur une classe
Installation de Django
$ pip install django (pour installer la dernière version)
Création du projet
$ django-admin startproject nouveau-projet
Création de l'application
$ ./manage.py startapp myapp
INSTALLED_APPS = (
'django.contrib.admin',
...
'myapp')
L’application créée
├── myapp
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
class MyAppSpot(models.Model):
specy = models.CharField(max_length=100)
location = models.CharField(max_length=200)
discovery = models.DateField(blank=True, null=True)
famous = models.BooleanField(default=False)
picture = models.FileField(upload_to='pictures')
Activer le modèle
Création des tables en base de données
$ ./manage.py syncdb
admin.site.register(MyAppSpot)
Aller plus loin avec ces concepts