FORMATION PYTHON

Formation Python

Année 2024

_

FORMATION PYTHON

Packages/paquets en Python

Les packages en Python décrivent les règles qui permettent de créer ses propres bibliothèques, de les installer et de les diffuser

Préambule

De manière générale, il est fortement recommandé, pour la gestion d'un package, de mettre en place un environnement virtuel. Il suffit de créer un dossier dédié, de se positionner dans ce dossier et de:

  • lancer la commande python -m venv . --prompt PACKAGE1 --copies
  • depuis ce dossier, lancer la commande:
    • Scripts\activate.bat pour Windons.
    • source ./bin/activate pour Linux ou Mac.

Vous êtes alors dans votre environnement virtuel, prêt à travailler.

FORMATION PYTHON

Structure minimale d'un package/paquet

Voici l'arborescence standard d'un package ou module

"""
minimal
|--	hcyvesv1
|   `-- __init__.py
|-- readme.md
`-- setup.py
"""
  • hcyvesv1: dossier qui correspond au nom du paquet.
  • __init__.py: fichier obligatoire, qui contient le code du paquet.
  • setup.py: fichier de configuration de ce paquet.

Voici le contenu du fichier __init__.py

# ------------------------------
def a_good_joke(you):
	"""
	"""
	return f"Et {you}, tu connais la blague du petit déjeuner ?\n Pas de bol hein !!!"
# ------------------------------
FORMATION PYTHON

Voici le Contenu de setup.py

# ------------------------------
from setuptools import setup

setup(
    name='hcyvesv1',
    version='0.1.0',
    description='my first package',
    URL='None',
    author='Yves Duprat',
    author_email='yduprat@gmail.com',
    licence='MIT',
    packages=['hcyvesv1'],
    zip_safe=False
    )
# ------------------------------

Le numéro de version doit être choisi avec sérieux et anticipation. Il est important dans la mesure où à chaque nouvelle mise à jour du package, ce numéro doit évoluer. Cela doit être une incrémentation de l'un des constituants: major, minor, micro. Voir l'exemple de sys.version:

> python3 -c 'import sys; print(sys.version_info)'
> sys.version_info(major=3, minor=13, micro=0, releaselevel='candidate', serial=1)
FORMATION PYTHON

Installer localement le package

Mode opératoire:

  • Se placer dans le dossier où est le le fichier setup.py.
  • Puis tapez la commande pip python -m pip install -e . . Attention au .
  • Vérifier l'installation:
    • Dans le dossier cible d'installation des libs de python 'lib/site-packages'. Normalement les fichiers inscripts dans le dossier d'installation sont des liens vers le dossier 'source'.
    • Exécuter un script qui vérifie l'import du paquet et l'exécution de la fonction a_good_joke avec la commande suivante: python -c "import hcyvesv1 as hc; print(hc.a_good_joke('Bob'))".
FORMATION PYTHON

Mettre à dispostion le package sur un dépot distant

Le dépot principal de Python est 'pypi.org'. Cependant, il est préférable dans un premier temps de faire ses premiers pas sur le dépot de test 'test.pypi.org'.

Pour installer un package sur un dépot:

  • créer un compte (avec mot de passe) sur le dépot.
  • mettre en place un fichier '.pypirc' sur votre dossier racine ($HOME ou %HOMEPATH%) qui contient pour chaque dépot, les infos de compte (voir la dernière page de ces slides)
  • installer les packages 'wheel' (format de paquets) et twine (upload vers 'pypi') dans votre environnement virtuel.

Les distributions correspondent au mode de diffusion des fichiers qui composent le package. [https://packaging.python.org/en/latest/overview/#python-binary-distributions]

FORMATION PYTHON

Depuis le dossier où est situé le fichier setup.py, voici le mode opératoire:

  1. contruire la(es) distribution(s):
  • Standard avec la commande: python setup.py sdist.
  • Wheel avec la commande: python setup.py bdist_wheel.
  • Vérifier leur présence dans le dossier local 'dist'.
  1. charger la(es) distribution(s) vers le dépot avec la commande twine:
    twine upload -r testpypi dist/* # ici le -r sert à sélectionner le dépot cible décrit dans le fichier '.pypirc'.

  2. vérification depuis le dépot 'test.pypi.org' en se connectant sur le site et lancer une recherche.

Sinon installer le dépôt via la commande:
python -m pip install --index-url https://test.pypi.org <name_of_package>

Voici votre premier package python diffusé sur un dépôt, bienvenu !!

Attention:

  • pour faire un nouveau versement vers le dépôt, vous devrez incrémenter la version
  • 2 packages ne peuvent avoir le même nom.
FORMATION PYTHON

Structure avancée d'un package/paquet

Voici un exemple de package plus avancé avec des fichiers de datas et une fichier pour de la ligne de commande. Ci dessous, un exemple d''arboresence:

"""
advanced
|-- hcyvesv2
|   |-- data
|   |   `-- blagues.txt
|   |-- __init__.py
|   |-- command_line.py
|    `-- text.py
|-- MANIFEST.in
`-- setup.py
"""

Quelques remarques:

  • dans le fichier MANIFEST.in sont indiqués les fichiers de données.
  • dans le setup.py, sont indiquées de nouvelles entrées comme:
    • 'entry_points'.
    • 'include_package_data'.
FORMATION PYTHON

Exemple de fichier .pypirc

"""
[distutils]
index-servers=
	testpypi
	pypi

[testpypi]
repository = https://test.pypi.org/legacy/
username = __token__
password = pip-khsfhksjklfjslkjfklsjlk (given you subscribe)

[pypi]
repository = https://pypi.python.org/pypi/
username = your_name
password = your_password
"""

Les références

https://packaging.python.org/en/latest/tutorials/installing-packages/