(presque) Tout ce dont votre package a besoin

Joseph Barbier - PyCon2025

A propos


Consulting

Open source

Data(viz)

Questions



Qui ne sait pas du tout ce qu’est un package Python ?


Qui a déjà créé un package Python ?


Qui contribue à des packages Python open source ?


Qui a déjà mis sur PyPI un package Python ?

TLDR: package Python

def my_super_cool_function(arg):
    if arg == "cool":
        something = 123
    else:
        ...

    ...

    return something

Facilement distribuable et donc reutilisable !

Le bon package et le mauvais package

Un bon package c’est pas (uniquement) une question de code.

  • facile à installer ?
  • facile à comprendre ?
  • facile à utiliser ?
  • facile à développer ?

Sommaire



Votre package a besoin de ces 3 choses, la dernière va vous surprendre 😱 !


  • pyproject.toml et gestion des dépendances

  • Tester dans les meilleures conditions

  • Créer la meilleure documentation

Gestion des dépendances

one ring file to rule them all


Un package ça se décompose en :

  • du code Python

  • des méta données

    • un nom, une description, des auteur.e.s
    • des dépendances (numpy, pandas, etc)
    • une license
    • …

✨pyproject.toml✨

one ring file to rule them all


pyproject.toml + uv = <3


Gestion des dépendances


Gestion des dépendances


Gestion des dépendances


Gestion des dépendances


Gestion des dépendances


  • open source → être convenient

numpy>=2.1.0



  • closed source → restreindre autant que possible

numpy==2.1.3

Tester son code

Tester son code

Tester son code ça veut dire quoi ?

  • vérifier que le code n’a pas d’erreur
  • vérifier que le code fait ce que je pense
  • vérifier que le code fonctionne dans différents scénarios
  • vérifier que le code fonctionne dans différents environnements


Il suffit de le faire tourner!

Il suffit de le faire tourner?

Comment (et quoi) tester

  • trust yourself
    • ❌ pas d’erreur
    • ❌ fait ce que je pense
    • ❌ différents scénarios
    • ❌ différents environnements
  • lancer un exemple d’utilisation
    • ✅ pas d’erreur
    • ❓ fait ce que je pense
    • ❌ différents scénarios
    • ❌ différents environnements
  • écrire des tests unitaires
    • ✅ pas d’erreur
    • ✅ fait ce que je pense
    • ✅ différents scénarios
    • ❌ différents environnements
  • git push ✅

Github actions

Scrits (yaml) qui se déclenchent dans certaines conditions

  • push
  • pull requests
  • tous les jours à minuit
  • …


→ faire tourner les tests unitaires

→ sur plusieurs versions de Python (open source ?)

→ sur plusieurs OS

→ Et cela tout le temps!

Github actions

sur plusieurs OS

Github actions

sur plusieurs OS ???


Warning

Python est interprété, mais peut se comporter différemment en fonction de l’OS

  • noms de fichiers
  • chemins
  • fichiers temporaires
  • permissions
  • modules spécifiques

Documentation

Documentation

La première (et la seule) chose que les gens verronts


Pour ça on a besoin de 2 choses:

  • Landing page
  • Diátaxis framework

Landing page

  • A quoi sert le package?
  • Dans quel contexte il s’inscrit (e.g., package Python)
  • Exemple usage minimaliste
  • Donner envie!

Landing page

Landing page

Landing page

Landing page

Exemple parfait: plotnine

Diátaxis framework (diataxis.fr)

Aller plus loin

Merci !

J’ai dis des choses fausses ?

  • venez m’en parler !

J’ai dis des choses pertinentes ?

  • venez m’en parler !


Autres ?