Création d’un package Python (Pypi)

* https://test.pypi.org/manage/project/ Dans le doute, passer par un test !!!
* https://pypi.org/manage/project/

Arborescence et fichiers

Arborescence du projet

git_my_name_module
├── docs
│   ├── make.bat
│   ├── Makefile
│   └── source
│       ├── conf.py
│       ├── index.rst
│       ├── parserhtml.rst
│       └── readme.rst
├── LICENSE
├── README.md
├── requirements.txt
├── setup.cfg
├── setup.py
└── src
    ├── my_name_module
    │   ├── __init__.py
    │   ├── _members.py
    │   └── ...
    └── tests
        ├── __init__.py
        └── test_my_name_module.py

setup.cfg :

# setup.cfg file at the root directory
[metadata]
name = my_name_module
version = 0.0.1a0
author = Pierre
description = Une courte description (bandeau de Pypi)
long_description = file:README.md
long_description_content_type = text/markdown
url = url_doc_par_exemple
project_urls =
    Source Code = url_git
keywords = mots-clefs

[options]
python_requires = >=3.9, <4
install_requires =
    module>=version
package_dir=
    =src
packages=my_name_module

[options.extras_require]
doc =
    sphinx==6.2.1
    sphinx-rtd-theme==1.2.1
    myst-parser==1.0.0

tests =
    pytest

setup.py :

import sys

if __name__ == '__main__':

    try:
        import sphinx
    except ImportError:
        sphinxInstalled=False
    else:
        sphinxInstalled=True
    #endTry

    if not sphinxInstalled:
        sys.stderr.write(f"> Warning, Sphinx is not installed ; I'll try it.\n")
    #endIf

    setup()

#endIf

Préinstallation

* Il est important de vérifier que le module marche bien avant (sur Pypi, impossible de supprimer module pour rollback la version !)

$ python3 -m venv pppmod
$ source pppmod/bin/activate
$ cd git_my_name_module
$ pip3 install --upgrade --force-reinstall .
$ python3
> import my_name_module
> my_name_module.MyClass()
$ pip uninstall my_name_module
$ deactivate    # Quitter l'environnement

* Si toutes les étapes précédentes sont bonnes, alors on peut passer à la suite : la création du module proprement dit et l’upload

$ python3.9 setup.py sdist bdist_wheel
$ twine upload dist/my_name_module-0.0.1a0.tar.gz
$ source pppmod/bin/activate
$ pip3 install my_name_module

À faire

* Compiler !

Sources

* https://towardsdatascience.com/create-your-own-python-package-and-publish-it-into-pypi-9306a29bc116
* https://sebsauvage.net/streisand.me/sametmax/?20181206_110748_Vive_setup.cfg__et_mort_a_pyproject.toml___
* https://stackoverflow.com/questions/32688688/how-to-write-setup-py-to-include-a-git-repository-as-a-dependency
* https://peps.python.org/pep-0440/#post-releases

Badges :

* https://docs.gitlab.com/ee/user/project/badges.html
* https://docs.gitlab.com/ee/api/project_badges.html
* https://gitlab.com/gitlab-org/gitlab/-/issues/29457