openfisca / openfisca-france

French tax and benefit system for OpenFisca
https://openfisca.org/fr
260 stars 99 forks source link

Ajouter __version__ dans le __init__.py #1888

Open benoit-cty opened 2 years ago

benoit-cty commented 2 years ago

Pour permettre aux utilisateurs de facilement savoir la version d'OpenFisca qu'ils utilisent, je propose d'ajouter dans le init.py:

__version__ = '117.0.4'

Pour ne pas faire le changement deux fois, le setup.py deviendrait:

[...]
from openfisca_france import __version__
setup(
    version = __version__,
[...]

La commande python ./setup.py --version fonctionne toujours.

Qu'en pensez-vous ?

Contexte

Je m'identifie plus en tant que :

benjello commented 2 years ago

Je crois qu'une autre solution est suggérée ici.

benjello commented 1 year ago

@MattiSG @sandcha qu'en pensez-vous ? Si on fait ces changements, il me semble qu'il faut aussi propager cela dans tous les repos openfisca par souci d'homogénéisation.

Si c'est secondaire, on ferme. Mais d'abord peut-être @benoit-cty peux-tu nous dire dans quelle situation tu en as eu besoin.

benoit-cty commented 1 year ago

J'en ai eu besoin pour afficher dans la log et dans le status de l'API budget de LexImpact la version d'OpenFisca utilisée : https://api-simu-etat-prod.leximpact.dev/status

Je m'en suis sorti avec les conseils de Sandcha par:

def status_version_of():
    country_package_metadata = tax_benefit_system.get_package_metadata()
    country_package_name = country_package_metadata["name"]
    country_package_version = country_package_metadata["version"]
    return [country_package_name, country_package_version]

Mais ce n'est pas la façon de faire habituelle.

Même si ce n'est pas une obligation d'utiliser version la doc officielle part de cette hypothèse : https://packaging.python.org/en/latest/guides/single-sourcing-package-version/

Une façon qui semble plus systématique pour obtenir la version d'un module est de faire:

import pkg_resources

module_name = "openfisca_france"
module_version = pkg_resources.get_distribution(module_name).version
print(f"{module_name} version: {module_version}")

Et ça fonctionne déjà dans OpenFisca. Donc ma demande est facultative, ce n'est pas une obligation, plus une convention adoptée par les différents projets:

>>> import pandas
>>> pandas.__version__
'1.5.0'
>>> import numpy
>>> numpy.__version__
'1.20.3'
>>> import scipy
>>> scipy.__version__
'1.9.2'
>>> import pytest
>>> pytest.__version__
'5.4.3'

Pour ce qui est de maintenir un même numéro de version dans plusieurs fichiers, il y a BumpVer qui permet de le faire, je l'ai mis en place dans OpenFisca-France-Data : https://github.com/openfisca/openfisca-france-data/commit/17f776ee0be7645e303f68992098fe82d22f398d

Une autre façon d'obtenir le numéro de version: python setup.py --version

benjello commented 1 year ago

Merci @benoit-cty pour ces détails. Je suis toujours pour normaliser au maximum e tsimplifier la vie. Donc j'ai rien contre mais il faudra mettre à jour les guidelines et avoir en tête que tout le monde n'utilise pas Make (pas dispo au CASD par exemple en standard) que tu utilises pour lancer Bumpver.

@sandcha @MattiSG je vous laisse trancher.

MattiSG commented 1 year ago

N'étant pas un expert de l'écosystème Python, je n'ai pas d'avis. Si c'est commun comme l'indique @benoit-cty dans https://github.com/openfisca/openfisca-france/issues/1888#issuecomment-1443834315, je suis favorable à ce que cette convention soit respectée. Je pense qu'elle peut l'être indépendamment de Core, d'ailleurs. Je suggère d'ouvrir une issue équivalente dans Core, voire une PR si cette issue est implémentée dans France.