Comment créer un package pip
J’ai remarqué que je recodais à longueur de journées les mêmes fonctions python ou que je n’arrivais pas à retrouver une fonction qui m’était utile dans le passé. J’ai donc décidé de me créer ma propre petite lib python avec toutes mes fonctions
Il était nécessaire que je puisse les avoir depuis n’importe quel PC et rapidement. J’ai donc naturellement pensé à PIP qui permet d’installer rapidement un package Python
pip install package_name
J’ai pu trouvé quelques tutoriaux sympas pour la création du squelette du package mais les méthodes pour uploader le package étaient deprecated.
Création du package
Deux fichiers sont nécessaires à minima :
-
setup.py
-
le_module.py
Par exemple pour créer le package xswitch contenant mes fonctions :
switch@RoG:/mnt/c/Users/switch/Desktop/xswitch$ tree
.
setup.py
xswitch
__init__.py
xswitch.py
setup.py
Il est nécessaire de créer un fichier de configuration contenant des informations sur le module.
J’utilise le module setuptools qui va permettre de créer ce fichier rapidement.
from setuptools import setup, find_packages
setup(
name="xswitch",
version="1.0.1",
packages=find_packages(), # permet de récupérer tout les fichiers
description="My usefull functions",
url="https://0xswitch.fr",
author="switch",
license="WTFPL",
python_requires=">=2.7"
)
De nombreux paramètres sont disponibles : https://packaging.python.org/tutorials/distributing-packages/ mais ceux que je vous ai présentés sont souvent suffisant.
Le paramètre install_requires peut être utile pour spécifier les dépendances de votre programme. Si elles ne sont pas disponibles lors de l’installation de votre package elles seront téléchargées et installées.
La méthode find_packages()”) peut prendre une liste d’arguments permettant d’inclure ou d’exclure certains fichiers.
le_module.py
J’ai choisi d’appeler ce fichier xswitch.py mais il aurait très bien pu être nommé autrement
#!/usr/bin/env python
#encoding: utf-8
import os
def hello():
if os.name != "nt":
print """
0xswitch.fr
"""
else:
print """
___ _ _ _ __
/ _ \__ _______ _(_) |_ ___| |__ / _|_ __
| | | \ \/ / __\ \ /\ / / | __/ __| '_ \ | |_| '__|
| |_| |> <\__ \\ V V /| | || (__| | | |_| _| |
\___//_/\_\___/ \_/\_/ |_|\__\___|_| |_(_)_| |_| """
if __name__ == "__main__":
hello()
Ce fichier contiendra tout votre module, pour mon exemple il ne contient qu’une fonction : hello()
_init_.py
J’ai menti il existe un autre fichier _init_.py, il permet simplement de rendre l’accessibilité des fonctions plus simple mais il n’est pas obligatoire :
from xswitch import hello
Cela permet de faire
from xswitch import hello
au lieu de
from xswitch.xswitch import hello
Merci Sam & Max
Distribution du package
Auparavant il était possible d’uploader le fichier directement sur pypi.org via une commande :
python setup.py register -r pypi
Mais elle est deprecated, dorénavant il est obligatoire de créer un compte sur : https://pypi.org/account/register/ pour pouvoir uploader son projet.
Une fois la création du compte effectué, il n’y a plus qu’a uploader le package
python setup.py install # test le fonctionnement du module
python -m xswitch.xswitch # devrait afficher un magnifique message
# si l'étape précédente a fonctionné
python setup.py sdist # permet de créer votre archive tar.gz contenant votre module dans le répertoire dist/
twine upload dist/* -u username -p password # permet d'uploader le package (ce sont les ID de votre compte pypi)
Votre package sera alors disponible à l’adresse suivante : https://pypi.org/project/votre_projet/
Mon projet est à l’adresse suivante : https://pypi.org/project/xswitch/
Il existe également https://test.pypi.org/manage/projects/ qui est identique mais est utilisé pour le développement et non la production.