diff --git a/images/xkcd_standards.png b/images/xkcd_standards.png new file mode 100644 index 0000000000000000000000000000000000000000..e04c4b681a0e90e471eaf353794970193c38a979 Binary files /dev/null and b/images/xkcd_standards.png differ diff --git a/versionner-un-code-python.qmd b/versionner-un-code-python.qmd index b6f78a13932e4a444e773bec781ba5de74ca3961..7042a2467cd67dac3439ab0026fdf44fbf84b4b8 100644 --- a/versionner-un-code-python.qmd +++ b/versionner-un-code-python.qmd @@ -539,32 +539,80 @@ La section `[project.urls]` liste les liens à afficher pour le projet et les diffèrent selon les documentations, ce qui est troublant : - URL du dépôt du code : `Repository` ^[[Declaring project metadata](https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata)] ou `Source` ^[[Flit : The pyproject.toml config file](https://flit.pypa.io/en/latest/pyproject_toml.html#urls-table)] ? +On trouve aussi `URL`, `GitHub`, `GitLab`, ... +L'article [PyPI Project URLs Cheatsheet](https://daniel.feldroy.com/posts/2023-08-pypi-project-urls-cheatsheet) +évoque des étiquettes trouvées via l'analyse du [code](https://github.com/pypi/warehouse/blob/70eac9796fa1eae24741525688a112586eab9010/warehouse/templates/packaging/detail.html#L20-L62) +de [PyPI](https://pypi.org/). + +Pourtant le projet [YAPF](https://pypi.org/project/yapf/0.40.2/#description) a +bien des étiquettes `Docs` et `Issues` mais PyPI n'affiche pas de lien vers les +URL. Problème de simple quote ^[[TOML String type](https://toml.io/en/v1.0.0#string)] ? +`Changelog` est pourtant affiché + +::: {.notes} L'auteur de [PyPI Project URLs Cheatsheet](https://daniel.feldroy.com/posts/2023-08-pypi-project-urls-cheatsheet) a obtenu les étiquettes suivantes à partir du [code](https://github.com/pypi/warehouse/blob/70eac9796fa1eae24741525688a112586eab9010/warehouse/templates/packaging/detail.html#L20-L62) de [PyPI](https://pypi.org/) -:::: {.columns} - -::: {.column width="50%"} - `homepage` - `repository` - `changelog` - `docs`, `documentation` -::: - -::: {.column width="50%"} - `bugs`, `issues`, `tracker` - `dowload` - `sponsor`, `funding`, `donate` - `mastodon`, `twitter`, `slack`, `reddit`, `discord`, `gitter` ::: -:::: +# PyPI + +[PyPI](https://pypi.org/) est le dépôt officiel pour les packages Python + +## Documentation + +Voici quelques sources d'information sur [PyPI](https://pypi.org/) + +- [documentation utilisateur](https://docs.pypi.org/) +- [blog](https://blog.pypi.org/) +- [documentation admin/dev](https://warehouse.pypa.io/) +- [Python Packaging User Guide](https://packaging.python.org/) + +## Authentification + +Afin de sécuriser le dépôt face aux packages malveillants, +[PyPI](https://pypi.org/) a mis en place l'authentification à 2 facteurs (2FA) +^[[Aide PyPI sur 2FA](https://pypi.org/help/#twofa) : L'authentification à deux +facteurs rend votre compte plus sécurisé en exigeant deux choses pour pouvoir +vous connecter : "quelque chose que vous savez" et "quelque chose que vous possédez"] +et va la rendre obligatoire d'ici fin 2023 +^[[Securing PyPI accounts via Two-Factor Authentication](https://blog.pypi.org/posts/2023-05-25-securing-pypi-with-2fa/)] + +> Si vous avez choisi de configurer l'authentification à deux facteurs, vous +> devrez fournir votre deuxième méthode de vérification d'identité **pendant le +> processus de connexion**. Cela affecte **uniquement la connexion via un +> navigateur Web**, et pas (encore) la publication des paquets.<br/> +> Nous recommandons à tous les personnes utilisant PyPI de **définir au moins +> deux méthodes d'authentification à deux facteurs** et de **générer des codes de +> récupération**. + +Voir la documentation sur l'utilisation d'un **périphérique de sécurité** ^[[Aide +utfkey](https://pypi.org/help/#utfkey)] ou d'une **application d'authentification** +^[[Aide TOTP](https://pypi.org/help/#totp)] + +## Test + +`PyPI` dispose d'une infrastructure sur laquelle on peut tester l'upload de ses +packages : [TestPyPI](https://test.pypi.org/] # Quelques backend pour le build de packages -## Flit 1/2 +{height="350"} + +Les backends se sont multipliés au point qu'il est difficile de savoir lequel +utiliser. + +## Flit 1/3 > [Flit](https://flit.pypa.io/en/latest/) provides a simple way to create and > upload pure Python packages and modules to `PyPI`. It focuses on [making the easy things easy](https://flit.pypa.io/en/latest/rationale.html) @@ -581,7 +629,7 @@ intégration de JavaScript, ... `Flit` dépendrait d'un seul développeur ? -## Flit 2/2 +## Flit 2/3 Exemple de fichier `pyproject.toml` généré par `Flit` : @@ -606,6 +654,18 @@ Les métadonnées `version` et `description` sont récupérées dynamiquement : [Flit : The pyproject.toml config file](https://flit.pypa.io/en/latest/pyproject_toml.html?highlight=dynamic#new-style-metadata) ::: +## Flit publish 3/3 + +Il est intéressant de tester l'upload de son package sur le serveur de test +[test.pypi.org](https://test.pypi.org/) + +Flit requiert alors de configurer l'accès à ce serveur dans le fichier +`.pypirc` ^[[Flit issue 122](https://github.com/pypa/flit/issues/122)] ce qu'il +ne fait pas automatiquement contrairement aux upload vers [pypi.org](https://pypi.org/) + +- [PyPA : Using TestPyPI](https://packaging.python.org/en/latest/guides/using-testpypi/) +- [Flit : Controlling package uploads](https://flit.pypa.io/en/latest/upload.html) + ## Hatch 1/2 > [Hatch](https://hatch.pypa.io/latest/) is a unified command-line tool meant