Project

General

Profile

Wiki » History » Version 5

Sofiane Mokrane, 11 Aug 2020 13:04

1 1 Sofiane Mokrane
*Guide de packaging de projets Python*
2
3
4
Ce guide explique comment construire un package installable d’un projet python.
5
Il montre la structure du projet nécessaire pour la création d’un package, les fichiers qu’il faut ajouter, et enfin la génération du package python.
6
7 3 Sofiane Mokrane
Un guide de génération d'un package est fourni en pj avec un exemple de projet : https://drive.google.com/file/d/1kQmhyI9cBtlRMuMNxLbuCwG-mpudlnhJ/view?usp=sharing
8
9 1 Sofiane Mokrane
10
1 – On commence par la création d’un dossier qu’on nomme ici «ProjetPython» contenant un répertoire portant le nom du package «mon_package» qu’on veut construire. Dans un premier temps on aura la structure suivante :
11
   
12
	ProjetPython
13
	└── mon_package
14
	    └── __init__.py
15
Le fichier __init__.py est requis pour importer le répertoire en tant que package, et peut simplement être un fichier vide.
16
17
2 - Création des fichiers nécessaires pour le package dans le répertoire principal «ProjetPython».
18
19
      ProjetPython
20
      ├── LICENSE
21
      ├── README.md
22
      ├── mon_package
23
      │   └──__init__.py
24
      ├── setup.py
25
      └── tests
26
Pour l’instant l’ensemble de ces fichiers créés peuvent être vide et la même chose pour le dossier test qui pourra contenir d’éventuels fichiers de test unitaires.
27
28
3 – Refactoring du code sous forme de classes et de module et mettre tous les fichiers code python dans le répertoire «mon_package»
29
30
4 - Création du fichier setup.py : ce fichier sert de script de construction de notre package par le module setuptools. C’est dans ce fichier qu’on va spécifier le nom du package, les fichiers python à inclure. Un exemple d’un fichier setup.py aura la structure suivante :
31
32 4 Sofiane Mokrane
33 1 Sofiane Mokrane
Cet exemple est non exhaustif, pour plus de détails :
34 4 Sofiane Mokrane
35 1 Sofiane Mokrane
   *    https://packaging.python.org/guides/packaging-namespace-packages/
36 4 Sofiane Mokrane
37 1 Sofiane Mokrane
   *	https://packaging.python.org/tutorials/packaging-projects/
38 4 Sofiane Mokrane
39 1 Sofiane Mokrane
40
5 - Ajouter un fichier requirements.txt au répertoire du projet dans lequel on spécifier les dépendances à ajouter lors de l’installation du package
41
42
6 - A cette étape on peut éditer les fichiers Readme et License
43
44
7 - Génération des archives du package qui peuvent être installés par la suite avec pip.
45
46 5 Sofiane Mokrane
   * Mise à jour ou installation des modules setuptools et wheel
47 1 Sofiane Mokrane
       
48 5 Sofiane Mokrane
       python3 -m pip install --user --upgrade setuptools wheel
49 2 Sofiane Mokrane
50 5 Sofiane Mokrane
   * Dans le répertoire ProjetPython on exécute la commande suivante pour la création des archives du package
51
     
52
       python3 setup.py sdist bdist_wheel
53 1 Sofiane Mokrane
54 5 Sofiane Mokrane
   * A la fin de l’exécution, dans le même répertoire on aura un nouveau dossier «dist» contenant deux fichiers :
55 1 Sofiane Mokrane
  
56 5 Sofiane Mokrane
      dist/
57 1 Sofiane Mokrane
        mon_package-0.0.1-py3-none-any.whl
58 2 Sofiane Mokrane
        mon_package-0.0.1.tar.gz
59 1 Sofiane Mokrane
60
61 4 Sofiane Mokrane
8 - Pour tester le package, il suffit d’installer l’archive .whl en local:
62 1 Sofiane Mokrane
63 5 Sofiane Mokrane
     Pip install Path/ProjetPython/dist/mon_package-0.0.1-py3-none-any.whl
64 1 Sofiane Mokrane
65 5 Sofiane Mokrane
  * Dans le cas où on a des fichiers de dépendances du code autre que les fichiers *.py*, soit on ajoute au répertoire du projet (ProjetPython dans notre cas) le fichier *MANIFEST.in* : https://docs.python.org/fr/3/distutils/sourcedist.html , ou bien dans le cas des fichier lourds on peut les stocker sur un serveur et créer une fonction dowload pour les télécharger avec python en utilisant le module *paramiko*.
66 1 Sofiane Mokrane
67 5 Sofiane Mokrane
  * Un exemple de projet est fournie dans le PackagingPythonProject.zip
68 4 Sofiane Mokrane
69 1 Sofiane Mokrane
9 – Déploiement sur le serveur pypiserveur de kaisensdata :
70 2 Sofiane Mokrane
   
71 5 Sofiane Mokrane
  * Installation du module twine
72 2 Sofiane Mokrane
  
73 5 Sofiane Mokrane
  * Déploiement sur le serveur, en se positionnant dans le répertoire du projet :
74 1 Sofiane Mokrane
 
75 5 Sofiane Mokrane
    twine upload -u kaisens -p Kaizendata.2017 –repository-url http://46.105.104.225:8880/ dist/*