Wiki » History » Version 3
Sofiane Mokrane, 10 Aug 2020 08:40
| 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 | |||
| 33 | Cet exemple est non exhaustif, pour plus de détails : |
||
| 34 | 2 | Sofiane Mokrane | * https://packaging.python.org/guides/packaging-namespace-packages/ |
| 35 | 1 | Sofiane Mokrane | * https://packaging.python.org/tutorials/packaging-projects/ |
| 36 | ===================================== |
||
| 37 | |||
| 38 | 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 |
||
| 39 | |||
| 40 | 6 - A cette étape on peut éditer les fichiers Readme et License |
||
| 41 | |||
| 42 | 7 - Génération des archives du package qui peuvent être installés par la suite avec pip. |
||
| 43 | |||
| 44 | 7.1 Mise à jour ou installation des modules setuptools et wheel |
||
| 45 | |||
| 46 | 2 | Sofiane Mokrane | * python3 -m pip install --user --upgrade setuptools wheel |
| 47 | 1 | Sofiane Mokrane | |
| 48 | 2 | Sofiane Mokrane | 7.2 Dans le répertoire ProjetPython on exécute la commande suivante pour la création des archives du package |
| 49 | 1 | Sofiane Mokrane | * python3 setup.py sdist bdist_wheel |
| 50 | |||
| 51 | 2 | Sofiane Mokrane | 7.3 A la fin de l’exécution, dans le même répertoire on au aura un un nouveau dossier «dist» contenant deux fichiers : |
| 52 | 1 | Sofiane Mokrane | |
| 53 | dist/ |
||
| 54 | mon_package-0.0.1-py3-none-any.whl |
||
| 55 | mon_package-0.0.1.tar.gz |
||
| 56 | 2 | Sofiane Mokrane | |
| 57 | |||
| 58 | 1 | Sofiane Mokrane | 8 - Pour tester le package, il suffit d’installer l’archive .whl en local: |
| 59 | * Pip install Path/ProjetPython/dist/mon_package-0.0.1-py3-none-any.whl |
||
| 60 | |||
| 61 | **** 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. **** |
||
| 62 | |||
| 63 | ============================================================= |
||
| 64 | Un exemple de projet est fournie dans le PackagingPythonProject.zip |
||
| 65 | ============================================================= |
||
| 66 | 9 – Déploiement sur le serveur pypiserveur de kaisensdata : |
||
| 67 | 2 | Sofiane Mokrane | |
| 68 | 9.1 Installation de module twine |
||
| 69 | |||
| 70 | 9.2 Déploiement sur le serveur, en se positionnant dans le répertoire du projet : |
||
| 71 | 1 | Sofiane Mokrane | |
| 72 | * twine upload -u kaisens -p Kaizendata.2017 –repository-url http://46.105.104.225:8880/ dist/* |