# Les modules

## Définition des modules (librairies ou bibliothèques)

Un module est un fichier (ou un dossier) contenant du code Python qui peut être importé et utilisé dans d'autres fichiers Python. Les modules sont une façon de structurer et d'organiser le code en Python, en les séparant en fonctionnalités logiques et en les rendant plus modulaires et réutilisables. Il existe des modules prêts à être utilisés, mais nous pouvons aussi créer des modules personnalisés.

{% hint style="info" %}
**En bref:** un module est comme une boîte à outil. Elle contient des outils (qui sont les fonctions) qu'on peut réutiliser dans un programme après l'avoir importé.
{% endhint %}

Exemples de modules existants : *`math`*, *`random`*, *`datetime`*, *`statistics`*, etc.

## Documentation des modules math, random et datetime

{% embed url="<https://docs.python.org/3/library/math.html>" %}

{% embed url="<https://docs.python.org/3/library/random.html>" %}

{% embed url="<https://docs.python.org/3/library/datetime.html>" %}

## L’importation de modules

Vous pouvez importer (i.e. ramener les fonctions utilitaires) des modules pour étendre les fonctionnalités du langage et vous aider à résoudre des problèmes plus facilement. L’importation d’un module en Python se fait à l'aide de l'instruction *`import`*. Lorsqu'un module est importé, il est possible de faire appel à ses fonctions afin de les utiliser dans notre programme.

### Syntaxes

Il existe plusieurs syntaxes d'importation en Python. Voici les principales :&#x20;

#### Syntaxe `import <nom_module>`

Importer un module complet dans votre programme. Le nom de la fonction à appeler dans le module doit être précédé par le nom du module.

```python
import <nom_module>
```

#### Exemple

```python
import math

print(math.sqrt(25))
```

#### Syntaxe  *`from <nom_module> import <nom_fonction>`*

Cette syntaxe permet d'importer une fonction spécifique d'un module plutôt que le module complet. Le reste des fonctions de ce module ne sont pas mises à disposition.

```python
from <nom_module> import <nom_fonction>
```

#### Exemples

<pre class="language-python"><code class="lang-python"><strong>from math import sqrt
</strong>
print(sqrt(25))
</code></pre>

Importation de plusieurs fonctions et constantes d'un module en même temps :

```python
from math import sqrt, pi, radians

print(sqrt(25))
print(pi)
print(radians(90))
```

#### &#x20;Syntaxe *`from <nom_module>` import \**

Cette syntaxe permet d'importer toutes les fonctions et constantes d'un module dans votre code. Le nom de la fonction à appeler ne doit pas être précédé par le nom du module.&#x20;

```python
from <nom_module> import *
```

{% hint style="danger" %}
Cette syntaxe n'est pas recommandée car elle peut créer des conflits de noms et rendre le code difficile à comprendre.
{% endhint %}

#### Exemple

```python
from math import *

print(sqrt(25))
print(pi)
print(radians(90))
```

#### *Syntaxe `import <nom_module> as <alias>`*

Cette syntaxe permet d'importer un module sous un **alias** pour faciliter l'utilisation de son nom.

```python
import <nom_module> as <alias>
```

#### Exemples

```python
import math as m
print(m.sqrt(25))
```

```python
import datetime as dt

now = dt.datetime.now()
print("Date et heure actuelles :", now)
```

## Les types de modules

### Les modules intégrés

Python a de nombreux modules intégrés qui peuvent être utilisés directement sans installation supplémentaire. Vous pouvez les importer directement en utilisant le mot clé import.

**Exemples** : math, datetime, statistics, random, etc.

### &#x20;Les modules tiers (doivent être installés)

Il existe de nombreux modules tiers disponibles pour Python, qui ne sont pas inclus dans l'installation standard de Python. Vous pouvez les installer à l'aide de l'outil ***pip*** (installateur de packages Python) et les importer en utilisant le mot clé import.

**Exemples** : pytest, numpy, pygame, matplotlib, pandas, GeoPandas, folium, etc.

## Installation de modules tiers

Comme exemple, nous allons installer le module ***`pytest`*** dont nous aurons besoin dans les prochains cours.

* **En utilisant la commande pip dans le terminal de PyCharm :**&#x20;

  Allez dans le terminal de PyCharm et entrez la commande suivante :&#x20;

  * ```
    pip install pytest
    ```

<figure><img src="https://700524925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn5YnWU89G98lz0ROIcGu%2Fuploads%2Fmn2Z9qZcYHFQZ7D7qnt9%2Fimage.png?alt=media&#x26;token=9ddb032b-3d09-4b64-ada7-7e39caf60994" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Il est parfois nécessaire d'exécuter la commande

&#x20;***`python.exe -m pip install --upgrade pip`***

pour mettre à jour l'installateur *`pip`*. En cas de besoin, le message de suivant apparait :&#x20;
{% endhint %}

<figure><img src="https://700524925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn5YnWU89G98lz0ROIcGu%2Fuploads%2Fj5SCtDQKoiE2Fnoo2tD5%2Fimage.png?alt=media&#x26;token=841a9729-8d08-4709-a23b-2ea8b200927d" alt=""><figcaption></figcaption></figure>

* **Dans l'IDE PyCharm :**&#x20;

Allez dans File->Settings et suivez les numéros de l'image ci-dessous.

<figure><img src="https://700524925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn5YnWU89G98lz0ROIcGu%2Fuploads%2FBm0uwue33B9DauOentoz%2Fimage.png?alt=media&#x26;token=fd5537d0-ec82-41b7-bffe-2a10dded5a3d" alt=""><figcaption></figcaption></figure>

## Annexe

Quelques méthodes et constantes en vrac à tester pour les modules math, random, statistics et datetime.

<pre class="language-python"><code class="lang-python"><strong>math : 
</strong>  Méthodes:
	- sqrt
	- abs
	- math.radians(30), math.degrees(math.pi/2)
	- sin, cos, log, 

  Constantes :
	- math.pi
	- math.e

Random:
  Méthodes:
	- random.random()
	- random.randint(a, b)
	- random.choice()

statistics:
  Méthodes:
	- .mean
	- .median
	- .stdev

<strong>datetime:
</strong><strong>- date_heure = datetime.datetime.now()
</strong>- datetime.datetime.date(date_heure)
- x = datetime.datetime(2020, 5, 17)

- x = datetime.datetime(2018, 6, 1)  
  x.strftime("%B")

- date_heure = datetime.datetime(2022,4,18, 7,58,12)
  date_heure.strftime("%m/%d/%Y, %H:%M:%S")

- from datetime import timedelta
</code></pre>
