La création de modules personnels est la base de tout code un peu complexe et correctement organisé en Python.

L’utilisation du module perso est très proche de celle des modules standards. L’utilisation consiste donc tout simplement à appeler son module via import.

Pour la création il existe toutefois quelques petites choses à savoir.

Création de module simple dans un répertoire commun.

Voilà en une image résumé la structure de base d’un module personnel simple :

La méthode est donc très simple :

  • Dans le même répertoire, on crée un fichier Python qui porte le nom de notre module, ce fichier contiendra nos fonctions/variables.
  • Dans le ou les fichiers de notre code, on importe notre module en indiquant à Python « import nom_de_mon_module ».
  • Lors de la première exécution du script, Python ca crée seul un répertoire « __pycache__ » qui contient des fichiers compilés nécessaires à l’exécution du module perso. On ne se souci pas de ce processus automatique.

Déclaration de fonctions dans un module personnel.

Pas de différence par rapport à la déclaration de fonction dans un script classique.

La différence se fera dans la manière de tester les fonctions grâce à la variable magic __name__ que nous verrons un peu plus tard dans cet article.

Appel de fonctions/variables de module personnel depuis un script

Ici par contre, la manière d’appeler une fonction contenue dans un module perso diffère totalement de l’appel d’une fonction classique.

Néanmoins, rien de perturbant puisque la syntaxe est exactement la même que pour les modules standards de Python, a savoir :

nom_du_module.nom_de_fonction()

Concrétement :

Passer des variables via un modules

La syntaxe est un peu plus inhabituelle mais somme toute assez simple. Dans le fichier module on déclare la variable de manière traditionnelle.
Par contre dans le fichier de script, on appel la variable via cette syntaxe :

nom_du_module.nom_de_variable

Concrétement :

Tester ses scripts dans les fichiers module grâce à __name__

Tout ce qui est contenu dans le fichier module est importé dans les fichiers de scripts lors de l’import. Y compris des choses que l’on ne voudrait pas voir importées telle que des variables ou des simples résultats de tests de codes.

Pour cela Python incorpore une variable magic nommé __name__ qui si elle est exécuté dans le script en cours retourne la valeur « __main__ »

Si elle est exécutée par un autre script qui ne contient pas directement cette variable, elle renvoi le nom du script qui la contient.

Il est donc simple de créer des structures conditionnelles pour vérifier depuis ou est executé le script.

Concrètement dans le fichier du module cela donne ça :

def my_square_function(a):
    b = a * a
    return b
if __name__ == "__main__":
    test = my_square_function(5)
    print(test)

Si ce code est exécuté depuis un autre script, la variable __name__ ne prend pas la valeur « __main__ » est la condition n’est donc pas rempli.

Gérer les modules personnels déportés grâce à la variable d’environnement Python Path

Si vous souhaitez gérer/stocker vos modules personnels ailleurs que dans le même répertoire que vos scripts, il va falloir manipuler la variable d’environnement Python Path. Deux choix s’offrent alors à vous :

  • stocker vos modules dans un des répertoires connu du Python Path et prévus à cette effet.
  • indiquer à Python Path vos propres repertoires.

Répertoires par défaut

Pour stocker vos modules à un endroit connu de Python, vous pouvez utiliser ce script afin de connaître l’état de votre Python Path actuel :

import sys
import pprint

pprint.pprint(sys.path)

Sur mon OS, ce script me retourne cette liste :

[ '/usr/lib64/python37.zip',
 '/usr/lib64/python3.7',
 '/usr/lib64/python3.7/lib-dynload',
 '/usr/lib64/python3.7/site-packages',
 '/usr/lib64/python3.7/site-packages']

Même si vous pouvez copier vos modules personnels dans n’importe lesquels de ces répertoires, /usr/lib64/python3.7/site-packages et /usr/lib64/python3.7/site-packages sont dédié à cette pratique. Ils seront donc à privilégier.

Répertoires personnalisé

Plutôt que de copier ses modules dans un des répertoires prédéfinis dans le Python Path, on peut indiquer à Python ou aller chercher nos propres modules n’importe ou sur votre système.
Pour cela il suffit d’éditer la variable d’environnement Python pour lui spécifier nos propres répertoire.

Pour cela, sous Linux il faut éditer son fichier .bashrc

Pour l’éditer :

sudo gedit ~/.bashrc 

(ou tout autre editeur de texte non-enrichi equivalent à gedit)

A la fin de ce fichier on ajoute son ou ses repertoires qui contiennent nos modules :

export PYTHONPATH="/home/vincent/Documents/my_modules"

Ensuite on indique aux systèmes (au terminal en cours pour être exact) qu’il doit « recharger » le fichier .bashrc:

source ~/.bashrc

Si on relance le script du dessus on obtient maintenant :

[ '/home/vincent/Documents/my_modules',
 '/usr/lib64/python37.zip',
 '/usr/lib64/python3.7',
 '/usr/lib64/python3.7/lib-dynload',
 '/usr/lib64/python3.7/site-packages',
 '/usr/lib/python3.7/site-packages']

Desormais, la commande import dans n’importe quel script ira également checker la présence de module dans ‘/home/vincent/Documents/my_modules’


0 commentaire

Laisser un commentaire