Deux scripts sont créés :

Script et module « quatre_operations.py » :

""" Deux nombres sont demandés en input () pour chaque opération"""
def addition () :
    print ("L'addition :")
    nbre1 = int (input ("Veuillez entrer le premier nombre : "))
    nbre2 = int (input ("Veuillez entrer le second nombre : "))
    print (nbre1, "+", nbre2, "=", nbre1 + nbre2)
def soustraction () :
    print ("La soustraction :")
    nbre1 = int (input ("Veuillez entrer le premier nombre : "))
    nbre2 = int (input ("Veuillez entrer le second nombre : "))
    print (nbre1, "-", nbre2, "=", nbre1 - nbre2)
def multiplication () :
    print ("La multiplication :")
    nbre1 = int (input ("Veuillez entrer le premier nombre : "))
    nbre2 = int (input ("Veuillez entrer le second nombre : "))
    print (nbre1, "X", nbre2, "=", nbre1 * nbre2)
def division_entiere () :
    print ("La division entière :")
    nbre1 = int (input ("Veuillez entrer le premier nombre : "))
    nbre2 = int (input ("Veuillez entrer le second nombre : "))
    print (nbre1, "//", nbre2, "=", nbre1 // nbre2)
def division_flottante () :
    print ("La division flottante :")
    nbre1 = int (input ("Veuillez entrer le premier nombre : "))
    nbre2 = int (input ("Veuillez entrer le second nombre : "))
    print (nbre1, "/", nbre2, "=", nbre1 / nbre2)

if __name__ == "__main__" :
    help ("quatre_operations")
    addition ( )
    soustraction ( )
    multiplication ( )
    division_entiere ( )
    division_flottante ( )

Script et module « autres_operations.py » :

""" pourcentages, racine carrée et puissance """
def x_pour_cent_de ( ) :
    print ("Cette fonction calcule et affiche les X pourcents de Y")
    nbre1 = int (input ("Veuillez entrez la valeur des pourcents : "))
    nbre2 = int (input ("Veuillez entrez le nombre duquel il faut calculer le pourcentage : "))
    print (nbre1, "% de", nbre2, "=",(nbre1/100)*nbre2)
def racine_carree_de ( ) :
    print ("Cette fonction calcule la racine carrée d'un nombre")
    from math import sqrt
    nbre1 = int (input ("Veuillez entrez un nombre dont on va claculer la racine carrée : "))
    print ("La racine carrée de", nbre1, "est",sqrt(nbre1))
def puissance_x_de ( ) :
    print ("Cette fonction calcule la puissance x d'un nombre")
    from math import pow
    nbre1 = int (input ("Veuillez entrez un nombre : "))
    nbre2 = int (input ("Veuillez entrez le nombre représentant le montant de la puissance  : "))
    print (nbre1, "à la puissance", nbre2, "=", pow(nbre1,nbre2))

if __name__ == "__main__" :
    help ("autres_operations")
    x_pour_cent_de ( )
    racine_carree_de ( )
    puissance_x_de ( )

Ces deux modules, nous les classons dans un répertoire nommé « calcul_etudiants » placé sur le bureau … Ce répertoire constitue le package de modules.
Nous ouvrons IDLE et nous y écrivons le code suivant :

from calcul_etudiants.quatre_operations import addition

Ce qui en français veut dire “du module quatre_operations qui est dans le package calcul_etudiants importe la fonction addition

>>> from calcul_etudiants.quatre_operations import addition
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in 
    from calcul_etudiants.quatre_operations import addition
ImportError: No module named 'calcul_etudiants'
>>>

Nous obtenons évidemment une erreur. Python ne trouve pas le chemin du package « calcul_etudiants » et donc encore moins du module « quatre_operations » et de sa fonction addition ( ). La raison en est très simple. Le répertoire de travail courant dans lequel Python cherche les packages et modules est tout simplement le répertoire d’installation du langage.
Considérez le code suivant :

>>> import os
>>> os.getcwd ()
'C:\\Python34'
>>>

os.getcwd () nous donne le répertoire de travail courant (Current Work Directory) qui est C:\\Python34 ! Ce chemin de répertoire, nous pouvons le changer. Cela fera l’objet d’un autre article.

Nous devons donc installer tout ce petit monde dans le répertoire racine de Python.

Test préalable en plaçant le module « quatre_operations » à la racine du répertoire d’installation Python :

Normalement l’importation du module ne devrait plus poser de problème.

>>> import quatre_operations
>>> help ("quatre_operations")
Help on module quatre_operations:

NAME
    quatre_operations - Deux nombres sont demandés en input () pour chaque opération

FUNCTIONS
    addition()
    
    division_entiere()
    
    division_flottante()
    
    multiplication()
    
    soustraction()

FILE
    c:\python34\quatre_operations.py


>>> addition ()
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in 
    addition ()
NameError: name 'addition' is not defined
>>> quatre_operations.addition ()
L'addition :
Veuillez entrer le premier nombre : 2
Veuillez entrer le second nombre : 6
2 + 6 = 8
>>> from quatre_operations import soustraction ()
SyntaxError: invalid syntax
>>> from quatre_operations import soustraction
>>> soustraction ()
La soustraction :
Veuillez entrer le premier nombre : 89
Veuillez entrer le second nombre : 5
89 - 5 = 84
>>> from quatre_operations import *
>>> multiplication ()
La multiplication :
Veuillez entrer le premier nombre : 5
Veuillez entrer le second nombre : 4
5 X 4 = 20
>>> 

L’import se passe bien ainsi que l’appel de la fonction builtin help ( ) qui nous en livre la documentation.

>>> addition ()

L’appel simple de la fonction addition ( ) se passe moins bien…

>>> quatre_operations.addition ()

L’appel complet à la suite du module importé se passe très bien…

>>> from quatre_operations import soustraction ()

Ce code vous montre que les parenthèses sont de trop

>>> from quatre_operations import soustraction
>>> soustraction ()

>>> from quatre_operations import *
>>> multiplication ()

Les manières suivantes d’importer et d’appeler  les fonctions sont aussi très efficaces !

Test final en plaçant le package « calcul_etudiants» à la racine du répertoire d’installation Python :

Ajout de « __init__.py » dans le répertoire « calcul_etudiants ». Permet à Python de reconnaître (de l’initialiser en tant que …) ce répertoire comme un package où se trouvent des modules. N’est donc pas confondu avec un répertoire ordinaire pouvant par exemple porter le même nom …

Ce script peut être vide mais peut contenir des informations utiles pour Python puisque celui-ci sera lu prioritairement à l’importation du package.

Attention !!!! Deux modules « quatre_operations » !!!!

C:\Python34\quatre_operatios.py et C:\Python34\calcul_etudiants\quatre_operatios.py

>>> help ("quatre_operations")
Help on module quatre_operations:

NAME
    quatre_operations - Deux nombres sont demandés en input () pour chaque opération

FUNCTIONS
    addition()
    
    division_entiere()
    
    division_flottante()
    
    multiplication()
    
    soustraction()

FILE
    c:\python34\quatre_operations.py


>>> help ("calcul_etudiants.quatre_operations")
Help on module calcul_etudiants.quatre_operations in calcul_etudiants:

NAME
    calcul_etudiants.quatre_operations - Deux nombres sont demandés en input () pour chaque opération

FUNCTIONS
    addition()
    
    division_entiere()
    
    division_flottante()
    
    multiplication()
    
    soustraction()

FILE
    c:\python34\calcul_etudiants\quatre_operations.py


>>> help ("calcul_etudiants.autres_operations")
Help on module calcul_etudiants.autres_operations in calcul_etudiants:

NAME
    calcul_etudiants.autres_operations - pourcentages, racine carrée et puissance

FUNCTIONS
    puissance_x_de()
    
    racine_carree_de()
    
    x_pour_cent_de()

FILE
    c:\python34\calcul_etudiants\autres_operations.py

>>> from calcul_etudiants import autres_operations
>>> help (autres_operations)
Help on module calcul_etudiants.autres_operations in calcul_etudiants:

NAME
    calcul_etudiants.autres_operations - pourcentages, racine carrée et puissance

FUNCTIONS
    puissance_x_de()
    
    racine_carree_de()
    
    x_pour_cent_de()

FILE
    c:\python34\calcul_etudiants\autres_operations.py


>>> from calcul_etudiants import quatre_operations
>>> help (quatre_operations)
Help on module calcul_etudiants.quatre_operations in calcul_etudiants:

NAME
    calcul_etudiants.quatre_operations - Deux nombres sont demandés en input () pour chaque opération

FUNCTIONS
    addition()
    
    division_entiere()
    
    division_flottante()
    
    multiplication()
    
    soustraction()

FILE
    c:\python34\calcul_etudiants\quatre_operations.py

>>> 

Et évidemment appel à l’aide help ( ) du package :

>>> help ("calcul_etudiants")
Help on package calcul_etudiants:

NAME
    calcul_etudiants

PACKAGE CONTENTS
    autres_operations
    quatre_operations

FILE
    c:\python34\calcul_etudiants\__init__.py


>>> 

Exécution :

>>> from calcul_etudiant import *
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in 
    from calcul_etudiant import *
ImportError: No module named 'calcul_etudiant'
>>> from calcul_etudiants import *
>>> from quatre_operations import *
>>> addition ()
L'addition :
Veuillez entrer le premier nombre : 8
Veuillez entrer le second nombre : 5
8 + 5 = 13
>>> division_entiere ()
La division entière :
Veuillez entrer le premier nombre : 8
Veuillez entrer le second nombre : 4
8 // 4 = 2
>>> from autres_operations import *
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in 
    from autres_operations import *
ImportError: No module named 'autres_operations'
>>> from calcul_etudiants import autres_operations
>>> x_pour_cent_de ( )
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in 
    x_pour_cent_de ( )
NameError: name 'x_pour_cent_de' is not defined
>>> autres_operations.x_pour_cent_de ( )
Cette fonction calcule et affiche les X pourcents de Y
Veuillez entrez la valeur des pourcents : 60
Veuillez entrez le nombre duquel il faut calculer le pourcentage : 80
60 % de 80 = 48.0
>>> 

Pour éviter ces problèmes d’importation, j’écris la ligne suivante dans le script « __init__.py » :

__all__ = ["quatre_operations","autres_operations"]

Nous y avons déclaré la variable “__all__” et nous lui avons assigné la liste des modules présents dans le package. Donc du package “calcul_etudiants”, nous pouvons tout importer puisque Python a interrogé le script “__init__” pour y trouver cette liste contenue dans cette variable ! 🙂 Si cet index du package n’a pas été créé, donc si la variable “__all__” n’a pas été définie et que l’on ne lui a pas assigné la liste des modules, il est alors impossible d’importer tous les modules du package avec la ligne de code “from calcul_etudiants import *”

Exécution :

>>> from calcul_etudiants import *
>>> quatre_operations.addition ()
L'addition :
Veuillez entrer le premier nombre : 9
Veuillez entrer le second nombre : 4
9 + 4 = 13
>>> autres_operations.x_pour_cent_de ( )
Cette fonction calcule et affiche les X pourcents de Y
Veuillez entrez la valeur des pourcents : 20
Veuillez entrez le nombre duquel il faut calculer le pourcentage : 800
20 % de 800 = 160.0
>>> 

Module “calcul_etudiants” :