From e7166ba04387c88dad32d8705e08e29a31d47b06 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Wed, 19 Mar 2025 14:54:59 +0100 Subject: [PATCH 01/24] README.md : ajout d'informations dans la rubrique 'installer les outils' et 'PYRPYR' --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 1871c61..4ebf7c9 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ Installations système requises : Depuis [PyPI](https://pypi.org/project/rok4-tools/) : `pip install rok4-tools` +Taper l'url suivante : `https://github.com/rok4/pytools/releases/` puis cliquez sur : `rok4_tools-x.y.z-py3-none-any.whl` puis télécharger en dehors du dépôt `pytools`. + Depuis [GitHub](https://github.com/rok4/pytools/releases/) : `pip install https://github.com/rok4/pytools/releases/download/x.y.z/rok4_tools-x.y.z-py3-none-any.whl` L'environnement d'exécution doit avoir accès aux librairies système. Dans le cas d'une utilisation au sein d'un environnement python, précisez bien à la création `python3 -m venv --system-site-packages .venv`. @@ -21,6 +23,8 @@ L'environnement d'exécution doit avoir accès aux librairies système. Dans le ### PYR2PYR +Installer la commande `jsonschema2md` en tapant `pip install jsonschema2md` + PYR2PYR est un outil de copie d'une pyramide d'un stockage à un autre. Il est possible de filtrer les dalles transférée en précisant une taille limite sous laquelle les données ne sont pas recopiées. La copie des dalles est parallélisable. Si des signatures MD5 sont présente dans le fichier liste, elles sont contrôlées après recopie. Un exemple de configuration est affichable avec la commande `pyr2pyr --role example` et l'appel `pyr2pyr --role check --conf conf.json` permet de valider un fichier de configuration. Le fichier de configuration peut être un objet, auquel cas le chemin doit être préfixé par le type de stockage (exemple : `s3://bucket/configuration.json`) From 3c04de8377d6bbea8b192db9abb814761300af4c Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 3 Apr 2025 10:03:24 +0200 Subject: [PATCH 02/24] =?UTF-8?q?pyproject.toml=20:=20ajout=20de=20la=20li?= =?UTF-8?q?brairie=20python=20pydeps=20pour=20g=C3=A9n=C3=A9rer=20automati?= =?UTF-8?q?quement=20le=20graphe=20des=20d=C3=A9pendances=20des=20programm?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index a286297..ecce0a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,6 +40,7 @@ dependencies = [ [project.optional-dependencies] doc = [ "pdoc3 >= 0.10.0" + "pydeps" ] dev = [ From d21306b371deb21b3a8f2588d1b67b7b54d6d28a Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 3 Apr 2025 10:04:44 +0200 Subject: [PATCH 03/24] =?UTF-8?q?pyproject.toml:=20ajout=20de=20la=20virgu?= =?UTF-8?q?le=20car=20on=20ajoute=20un=20=C3=A9l=C3=A9ment=20=C3=A0=20la?= =?UTF-8?q?=20liste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ecce0a9..8183005 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ dependencies = [ [project.optional-dependencies] doc = [ - "pdoc3 >= 0.10.0" + "pdoc3 >= 0.10.0", "pydeps" ] From 63521f2f0e7d19a332394542b2dc817df9cd77f4 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 10:05:02 +0200 Subject: [PATCH 04/24] =?UTF-8?q?HOWTO.md=20&=20README.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 36 ++++++++++++++++++++++++++++++++++++ README.md | 2 ++ 2 files changed, 38 insertions(+) create mode 100644 HOWTO.md diff --git a/HOWTO.md b/HOWTO.md new file mode 100644 index 0000000..b535cfa --- /dev/null +++ b/HOWTO.md @@ -0,0 +1,36 @@ +## JOINCACHE : Exemple de fichier de configuration : + +* Exemple de fichier de configuration valide `exemple_valid_json.json`: + ```json +{ + "logger": { + "level": "INFO" + }, + "datasources": [ + { + "top": "0", + "bottom": "1", + "source": { + "type": "PYRAMIDS", + "descriptors": [ + "~/Téléchargements/ALTI.json"] + } + } + ], + "pyramid": { + "name": "joincache", + "root": "pyramids" + }, + "process": { + "directory": "s3://bucket_temp/joincache", + "parallelization": 1, + "mask": true + } +} +``` + +* Résultat obtenu : + ```sh + joincache --role check --conf exemple_valid_json.json + Valid configuration ! + ``` \ No newline at end of file diff --git a/README.md b/README.md index 4ebf7c9..94c84a8 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,8 @@ Un calcul complet d'une pyramide implique l'utilisation de l'outil avec les 3 mo * Actions : lecture des TODO lists pour écrire le fichier liste final et écriture du descripteur de la pyramide en sortie. * Appel : `joincache --role finisher --conf conf.json` + + #### Configuration Possibilités de contenu du fichier JSON (généré à partir du schéma JSON avec `jsonschema2md src/rok4_tools/joincache_utils/schema.json /dev/stdout`) From facacefca4513b54dcff9227a4d9f639abe36bb2 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 10:09:18 +0200 Subject: [PATCH 05/24] =?UTF-8?q?README.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 94c84a8..1c660d5 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ Un calcul complet d'une pyramide implique l'utilisation de l'outil avec les 3 mo * Actions : lecture des TODO lists pour écrire le fichier liste final et écriture du descripteur de la pyramide en sortie. * Appel : `joincache --role finisher --conf conf.json` - +![ROK4 PYTOOLS FICHIER DE CONFIGURATION](https://github.com/rok4/pytools/blob/feature/documentation_new_users/HOWTO.md#joincache--exemple-de-fichier-de-configuration-) #### Configuration From 2a4b4188db6720ab6bdaa30f88469b27c4657dec Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 10:30:11 +0200 Subject: [PATCH 06/24] README.md : rajout d'une information siur le split --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c660d5..5799718 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Une copie complète d'une pyramide implique l'utilisation de l'outil avec les 3 * Appel : `pyr2pyr --role master --conf conf.json` 2. Rôle `agent` : * Actions : lecture de la TODO list depuis le dossier de traitement et recopie des dalles - * Appel (un appel par TODO list) : `pyr2pyr --role agent --conf conf.json --split X` + * Appel (un appel par TODO list) : `pyr2pyr --role agent --conf conf.json --split X` où X : est un entier naturel. 3. Rôle `finisher` : * Actions : lecture des TODO lists pour écrire le fichier liste final et écriture du descripteur de la pyramide en sortie. * Appel : `pyr2pyr --role finisher --conf conf.json` From aef02e2777648a85cce6443f7802a3bbb6b6379a Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 11:34:04 +0200 Subject: [PATCH 07/24] =?UTF-8?q?HOWTO.md=20=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index b535cfa..26288ef 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -33,4 +33,20 @@ ```sh joincache --role check --conf exemple_valid_json.json Valid configuration ! - ``` \ No newline at end of file + ``` + +## TMSIZER : un exemple de lignes de commande avec différents filtres : +```sh +tmsizer -i requests.txt --tms PM -io levels=15,12 -io layer=LAYER.NAME2 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif +HeatmapProcessor : 81 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) +``` + +```sh +tmsizer -i requests.txt --tms PM -io levels=15,14 -io layer=LAYER.NAME1 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif +HeatmapProcessor : 110 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) +``` + +```sh +tmsizer -i requests.txt --tms PM -io levels=0,15 -io layer=LAYER.NAME2 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif +HeatmapProcessor : 59 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) +``` \ No newline at end of file From 31aacf07a6e4b0beb1f6b419dfe7f306b4c26b88 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 11:44:16 +0200 Subject: [PATCH 08/24] README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 5799718..572e069 100644 --- a/README.md +++ b/README.md @@ -188,6 +188,10 @@ Exemple (GETTILE_PARAMS -> HEATMAP) avec une aire prédéfinie et une correspond `tmsizer -i logs.txt --tms PM -if GETTILE_PARAMS -of HEATMAP -oo area=FXX -oo level=15 -o heatmap.tif` +Le nombre de requêtes pris en compte pour générer l'image, en fonction des filtres et de la zone couverte par la carte de chaleur : + +![ROK4 PYTOOLS FICHIER GETTILES](https://github.com/rok4/pytools/blob/feature/documentation_new_users/HOWTO.md#tmsizer--un-exemple-de-lignes-de-commande-avec-diff%C3%A9rents-filtres-) + ## Compiler la suite d'outils ```sh From 138d7f7d7ecfd9294aeebadd9dc2c2183fc3e2bc Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 11:46:12 +0200 Subject: [PATCH 09/24] README.md : rajout sortie de ligne de commande exemple --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 572e069..fdf305f 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,8 @@ Exemple (GETTILE_PARAMS -> HEATMAP) avec une aire prédéfinie et une correspond Le nombre de requêtes pris en compte pour générer l'image, en fonction des filtres et de la zone couverte par la carte de chaleur : +```HeatmapProcessor : 81 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0))``` + ![ROK4 PYTOOLS FICHIER GETTILES](https://github.com/rok4/pytools/blob/feature/documentation_new_users/HOWTO.md#tmsizer--un-exemple-de-lignes-de-commande-avec-diff%C3%A9rents-filtres-) ## Compiler la suite d'outils From bc92b88046659413e584f3f2469b5996ead8ee07 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 11:55:22 +0200 Subject: [PATCH 10/24] =?UTF-8?q?HOWTO.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index 26288ef..427bebf 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -35,6 +35,22 @@ Valid configuration ! ``` +## MAKELAYER : un exemple de ligne de commande à lancer : +```sh +make-layer --pyramids s3://pyramids/ALTI.json --name my_data --styles normal --title my_data --resampling bicubic --directory . +``` +Voici le fichier de résultats au format JSON `my_data.json` obtenu : +```json +{"title": "my_data", "abstract": "bicubic", "keywords": ["RASTER", "my_data"], "wmts": {"authorized": true}, "tms": {"authorized": true}, "bbox": {"south": 14.221788628396906, "west": -61.435546874999375, + "north": 14.944784875087676, "east": -60.64453124999938}, "pyramids": [{"bottom_level": "13", "top_level": "0", "path": "s3://pyramids/ALTI.json"}], "wms": {"authorized": true, "crs": ["CRS:84", "IGNF:WG +S84G", "EPSG:3857", "EPSG:4258", "EPSG:4326"]}, "styles": ["normal", "normal"], "resampling": "nn"} +``` + +## PYROLYSE : un exemple de ligne de commande à lancer : +```sh +pyr2pyr --role check --conf Téléchargements/PM.json | pyr2pyr --role master --conf Téléchargements/PM.json | pyr2pyr --role agent --conf Téléchargements/PM.json --split 3 | pyr2pyr --role finisher --conf Téléchargements/PM.json +``` + ## TMSIZER : un exemple de lignes de commande avec différents filtres : ```sh tmsizer -i requests.txt --tms PM -io levels=15,12 -io layer=LAYER.NAME2 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif From d56ae980014fd54fe10ac8c34a10951e981a8e1e Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 12:02:59 +0200 Subject: [PATCH 11/24] =?UTF-8?q?HOWTO.md:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 427bebf..31d4a81 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,3 +1,8 @@ +## PYR2PYR : un exemple de ligne de commande à lancer : +```sh +pyr2pyr --role check --conf Téléchargements/PM.json | pyr2pyr --role master --conf Téléchargements/PM.json | pyr2pyr --role agent --conf Téléchargements/PM.json --split 3 | pyr2pyr --role finisher --conf Téléchargements/PM.json +``` + ## JOINCACHE : Exemple de fichier de configuration : * Exemple de fichier de configuration valide `exemple_valid_json.json`: @@ -48,9 +53,10 @@ S84G", "EPSG:3857", "EPSG:4258", "EPSG:4326"]}, "styles": ["normal", "normal"], ## PYROLYSE : un exemple de ligne de commande à lancer : ```sh -pyr2pyr --role check --conf Téléchargements/PM.json | pyr2pyr --role master --conf Téléchargements/PM.json | pyr2pyr --role agent --conf Téléchargements/PM.json --split 3 | pyr2pyr --role finisher --conf Téléchargements/PM.json + ``` + ## TMSIZER : un exemple de lignes de commande avec différents filtres : ```sh tmsizer -i requests.txt --tms PM -io levels=15,12 -io layer=LAYER.NAME2 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif From f20f7638ab280e23633524abfcdc739fb444d5f7 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 12:04:19 +0200 Subject: [PATCH 12/24] =?UTF-8?q?HOWTO.md=20:=20m=C3=A0j=20pyrolyse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 31d4a81..6e043b0 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -53,7 +53,7 @@ S84G", "EPSG:3857", "EPSG:4258", "EPSG:4326"]}, "styles": ["normal", "normal"], ## PYROLYSE : un exemple de ligne de commande à lancer : ```sh - +pyrolyse --pyramid s3://pyramids/ALTI.json --output resultats.json --tiles --progress --deciles --ratio 1 ``` From 4373ad54a36ad73e5ae4cf13ee5659da42e81782 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 12:07:23 +0200 Subject: [PATCH 13/24] =?UTF-8?q?README.md=20:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index fdf305f..51e0f1f 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,10 @@ Possibilités de contenu du fichier JSON (généré à partir du schéma JSON av - **`parallelization`** *(integer)*: Parallelization level, number of todo lists and agents working at the same time. Minimum: `1`. Default: `1`. - **`follow_links`** *(boolean)*: Do we follow links (data slabs in others pyramids than the 'from' one). Default: `False`. - **`slab_limit`** *(integer)*: Minimum slab size (if under, we do not copy). Minimum: `0`. Default: `0`. + +* Exemple d'utilisation de pyr2pyr : + +![ROK4 PYR2PYR](https://github.com/rok4/pytools/blob/feature/documentation_new_users/HOWTO.md#pyr2pyr--un-exemple-de-ligne-de-commande-%C3%A0-lancer-) ### JOINCACHE @@ -132,6 +136,8 @@ Utilisation : `make-layer [-h] [--version] --pyramids storage://path/to/pyr.json * `--resampling {nn,linear,bicubic,lanczos_2,lanczos_3,lanczos_4}` : type d'interpolation pour le réechantillonnage * `--directory s3://layers_bucket` : dossier, fichier ou objet, dans lequel écrire le descripteur de pyramide. Affiche dans la sortie standard si non fourni +![ROK4 MAKELAYER](https://github.com/rok4/pytools/blob/feature/documentation_new_users/HOWTO.md#makelayer--un-exemple-de-ligne-de-commande-%C3%A0-lancer-) + ### PYROLYSE PYROLYSE est un outil d'analyse d'une pyramide, permettant d'avoir le nombre et la taille des dalles et tuiles, au global et par niveau. Les tailles des dalles et des tuiles ne sont pas toutes récupérées : un ratio permet de définir le nombre de mesures (un ratio de 100 entraînera la récupération de la taille d'une dalle sur 100 et d'une de ses tuile). Ce ratio s'applique par niveau (pour ne pas avoir que des données sur le meilleur niveau, celui qui contient le plus de dalles). Lorsque les statistiques sur les tuiles sont activées, on mesure le temps de lecture du header. @@ -150,6 +156,8 @@ Utilisation : `pyrolyse [-h] [--version] --pyramid storage://path/to/pyr.json [- * `--centiles` : avoir les centiles plutôt que toutes les valeurs de taille et de temps d'accès * `--ratio N` : ratio à appliquer sur la mesure de taille (un parmi , 100 par défaut). Toutes les dalles sont comptées +![ROK4 PYROLYSE](https://github.com/rok4/pytools/blob/feature/documentation_new_users/HOWTO.md#pyrolyse--un-exemple-de-ligne-de-commande-%C3%A0-lancer-) + ### TMSIZER TMSIZER est un outil permettant de convertir des informations selon différents formats en accord avec un Tile Matrix Set en particulier. Les données en entrée peuvent être lues depuis un fichier, un objet ou l'entrée standard. Les données en sortie peuvent être écrites dans un fichier, un objet ou la sortie standard. From 331d5e17a7f2caf54edf38f956bcf96fb0355280 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 12:14:42 +0200 Subject: [PATCH 14/24] =?UTF-8?q?HOWTO.md:=20m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index 6e043b0..bb64dec 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -58,16 +58,20 @@ pyrolyse --pyramid s3://pyramids/ALTI.json --output resultats.json --tiles --pro ## TMSIZER : un exemple de lignes de commande avec différents filtres : + +Dans l'exemple ci-après, on a 81 requêtes pris en compte pour générer l'image, en fonction des filtres choisis et de la zone couverte par la carte de chaleur: ```sh tmsizer -i requests.txt --tms PM -io levels=15,12 -io layer=LAYER.NAME2 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif HeatmapProcessor : 81 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) ``` +Dans l'exemple ci-après, on a 110 requêtes pris en compte pour générer l'image, en fonction des filtres choisis et de la zone couverte par la carte de chaleur: ```sh tmsizer -i requests.txt --tms PM -io levels=15,14 -io layer=LAYER.NAME1 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif HeatmapProcessor : 110 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) ``` +Dans l'exemple ci-après, on a 59 requêtes pris en compte pour générer l'image, en fonction des filtres choisis et de la zone couverte par la carte de chaleur: ```sh tmsizer -i requests.txt --tms PM -io levels=0,15 -io layer=LAYER.NAME2 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif HeatmapProcessor : 59 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) From 2fe0312007cd8f78fe07e7b5cf6723b17c581c71 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 14:09:27 +0200 Subject: [PATCH 15/24] =?UTF-8?q?HOWTO.md=20:=20m=C3=A0j=20partie=20pyroly?= =?UTF-8?q?se?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index bb64dec..60ed0bf 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -56,6 +56,19 @@ S84G", "EPSG:3857", "EPSG:4258", "EPSG:4326"]}, "styles": ["normal", "normal"], pyrolyse --pyramid s3://pyramids/ALTI.json --output resultats.json --tiles --progress --deciles --ratio 1 ``` +Le résultat donne le fichier de résultats `resultats.json` suivant : +```json +{"global": {"slab_count": 17, "slab_sizes": [77819.0, 77844.6, 77860.6, 77975.8, 78644.6, 82379.0, 119482.99999999999, 335572.59999999986, 825531.0000000003, 2665611.0, 3715851.0], "link_count": 0, "tile_ +sizes": [283.0, 283.0, 283.0, 283.0, 283.0, 283.0, 283.0, 283.0, 283.0, 287.0, 310.0]}, "levels": {"13": {"slab_count": 4, "slab_sizes": [77819.0, 199047.80000000002, 320276.60000000003, 441505.3999999999 +7, 863780.6000000003, 1436579.0, 2009377.3999999997, 2523703.7999999993, 2921086.2, 3318468.6, 3715851.0], "link_count": 0, "tile_sizes": [283.0, 283.0, 283.0, 283.0, 283.0, 283.0, 283.0, 283.0, 283.0, 28 +3.0, 283.0]}, "12": {"slab_count": 1, "slab_sizes": [3077163], "link_count": 0, "tile_sizes": [283]}, "11": {"slab_count": 1, "slab_sizes": [911435], "link_count": 0, "tile_sizes": [283]}, "10": {"slab_co +unt": 1, "slab_sizes": [298987], "link_count": 0, "tile_sizes": [283]}, "9": {"slab_count": 1, "slab_sizes": [136827], "link_count": 0, "tile_sizes": [283]}, "8": {"slab_count": 1, "slab_sizes": [93467], +"link_count": 0, "tile_sizes": [283]}, "7": {"slab_count": 1, "slab_sizes": [82379], "link_count": 0, "tile_sizes": [283]}, "6": {"slab_count": 1, "slab_sizes": [79211], "link_count": 0, "tile_sizes": [28 +3]}, "5": {"slab_count": 1, "slab_sizes": [78267], "link_count": 0, "tile_sizes": [283]}, "4": {"slab_count": 1, "slab_sizes": [77995], "link_count": 0, "tile_sizes": [283]}, "3": {"slab_count": 1, "slab_ +sizes": [77899], "link_count": 0, "tile_sizes": [283]}, "2": {"slab_count": 1, "slab_sizes": [77851], "link_count": 0, "tile_sizes": [283]}, "1": {"slab_count": 1, "slab_sizes": [77851], "link_count": 0, +"tile_sizes": [310]}, "0": {"slab_count": 1, "slab_sizes": [77835], "link_count": 0, "tile_sizes": [293]}}, "perfs": [0.002020657000684878, 0.0021233711999229855, 0.0021787890007544776, 0.0023693994000495 +875, 0.0024838273999193915, 0.0027725769996322924, 0.002991372598626185, 0.0032549347990425298, 0.004386014799820259, 0.005820798000422655, 0.006239024000024074]} +``` ## TMSIZER : un exemple de lignes de commande avec différents filtres : From 93c5e712e208227e1d64c0f5d7a6db840492202e Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 14:12:14 +0200 Subject: [PATCH 16/24] =?UTF-8?q?HOWTO.md=20:=20m=C3=A0j=20partie=20'tmsiz?= =?UTF-8?q?er'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 60ed0bf..b439566 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -80,7 +80,7 @@ HeatmapProcessor : 81 hits on image with dimensions (600, 400) and bbox (65000.0 Dans l'exemple ci-après, on a 110 requêtes pris en compte pour générer l'image, en fonction des filtres choisis et de la zone couverte par la carte de chaleur: ```sh -tmsizer -i requests.txt --tms PM -io levels=15,14 -io layer=LAYER.NAME1 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif +tmsizer -i requests.txt --tms PM -io levels=15,14 -io layer=LAYER.NAME1,LAYER.NAME2,LAYER.NAME3 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif HeatmapProcessor : 110 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) ``` From 7f350a26d993b85ba4281f6a69ffa7e40803569b Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 4 Apr 2025 14:14:38 +0200 Subject: [PATCH 17/24] =?UTF-8?q?README.md=20:=20m=C3=A0j=20partie=20pytoo?= =?UTF-8?q?ls=20tmsizer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51e0f1f..243ba0f 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ Le nombre de requêtes pris en compte pour générer l'image, en fonction des fi ```HeatmapProcessor : 81 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0))``` -![ROK4 PYTOOLS FICHIER GETTILES](https://github.com/rok4/pytools/blob/feature/documentation_new_users/HOWTO.md#tmsizer--un-exemple-de-lignes-de-commande-avec-diff%C3%A9rents-filtres-) +![ROK4 PYTOOLS TMSIZER FILE GETTILES](https://github.com/rok4/pytools/blob/feature/documentation_new_users/HOWTO.md#tmsizer--un-exemple-de-lignes-de-commande-avec-diff%C3%A9rents-filtres-) ## Compiler la suite d'outils From edbf5590e8bae3b5f85d0353e33fda9f6dd40f7f Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 09:23:42 +0200 Subject: [PATCH 18/24] =?UTF-8?q?HOWTO.md=20:=20corrections=20suite=20rema?= =?UTF-8?q?rques=20de=20Th=C3=A9o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index b439566..13edce2 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,9 +1,11 @@ -## PYR2PYR : un exemple de ligne de commande à lancer : +## Exemple de cas d'utilisations des fichiers exécutables du projet ROK4 + +### PYR2PYR : un exemple de ligne de commande à lancer : ```sh -pyr2pyr --role check --conf Téléchargements/PM.json | pyr2pyr --role master --conf Téléchargements/PM.json | pyr2pyr --role agent --conf Téléchargements/PM.json --split 3 | pyr2pyr --role finisher --conf Téléchargements/PM.json +pyr2pyr --role check --conf path_to_file/PM.json | pyr2pyr --role master --conf path_to_file/PM.json | pyr2pyr --role agent --conf path_to_file/PM.json --split 3 | pyr2pyr --role finisher --conf path_to_file/PM.json ``` -## JOINCACHE : Exemple de fichier de configuration : +### JOINCACHE : Exemple de fichier de configuration : * Exemple de fichier de configuration valide `exemple_valid_json.json`: ```json @@ -18,7 +20,7 @@ pyr2pyr --role check --conf Téléchargements/PM.json | pyr2pyr --role master -- "source": { "type": "PYRAMIDS", "descriptors": [ - "~/Téléchargements/ALTI.json"] + "path_to_file/ALTI.json"] } } ], @@ -40,18 +42,18 @@ pyr2pyr --role check --conf Téléchargements/PM.json | pyr2pyr --role master -- Valid configuration ! ``` -## MAKELAYER : un exemple de ligne de commande à lancer : +### MAKELAYER : un exemple de ligne de commande à lancer : ```sh -make-layer --pyramids s3://pyramids/ALTI.json --name my_data --styles normal --title my_data --resampling bicubic --directory . +make-layer --pyramids s3://pyramids/ALTI.json --name ALTI_data --styles normal --title ALTI --resampling bicubic --directory . ``` -Voici le fichier de résultats au format JSON `my_data.json` obtenu : +Voici le fichier de résultats au format JSON `ALTI_data.json` obtenu : ```json -{"title": "my_data", "abstract": "bicubic", "keywords": ["RASTER", "my_data"], "wmts": {"authorized": true}, "tms": {"authorized": true}, "bbox": {"south": 14.221788628396906, "west": -61.435546874999375, +{"title": "ALTI_data", "abstract": "bicubic", "keywords": ["RASTER", "my_data"], "wmts": {"authorized": true}, "tms": {"authorized": true}, "bbox": {"south": 14.221788628396906, "west": -61.435546874999375, "north": 14.944784875087676, "east": -60.64453124999938}, "pyramids": [{"bottom_level": "13", "top_level": "0", "path": "s3://pyramids/ALTI.json"}], "wms": {"authorized": true, "crs": ["CRS:84", "IGNF:WG S84G", "EPSG:3857", "EPSG:4258", "EPSG:4326"]}, "styles": ["normal", "normal"], "resampling": "nn"} ``` -## PYROLYSE : un exemple de ligne de commande à lancer : +### PYROLYSE : un exemple de ligne de commande à lancer : ```sh pyrolyse --pyramid s3://pyramids/ALTI.json --output resultats.json --tiles --progress --deciles --ratio 1 ``` @@ -70,7 +72,17 @@ sizes": [77899], "link_count": 0, "tile_sizes": [283]}, "2": {"slab_count": 1, " 875, 0.0024838273999193915, 0.0027725769996322924, 0.002991372598626185, 0.0032549347990425298, 0.004386014799820259, 0.005820798000422655, 0.006239024000024074]} ``` -## TMSIZER : un exemple de lignes de commande avec différents filtres : +### TMSIZER : un exemple de lignes de commande avec différents filtres : + +#### TMSIZER : un exemple de lignes de commande avec un filtre de 59 requêtes pour générer l'image : + +Dans l'exemple ci-après, on a 59 requêtes pris en compte pour générer l'image, en fonction des filtres choisis et de la zone couverte par la carte de chaleur: +```sh +tmsizer -i requests.txt --tms PM -io levels=0,15 -io layer=LAYER.NAME2 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif +HeatmapProcessor : 59 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) +``` + +#### TMSIZER : un exemple de lignes de commande avec un filtre de 81 requêtes pour générer l'image : Dans l'exemple ci-après, on a 81 requêtes pris en compte pour générer l'image, en fonction des filtres choisis et de la zone couverte par la carte de chaleur: ```sh @@ -78,14 +90,10 @@ tmsizer -i requests.txt --tms PM -io levels=15,12 -io layer=LAYER.NAME2 -if GETT HeatmapProcessor : 81 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) ``` +#### TMSIZER : un exemple de lignes de commande avec un filtre de 110 requêtes pour générer l'image : + Dans l'exemple ci-après, on a 110 requêtes pris en compte pour générer l'image, en fonction des filtres choisis et de la zone couverte par la carte de chaleur: ```sh tmsizer -i requests.txt --tms PM -io levels=15,14 -io layer=LAYER.NAME1,LAYER.NAME2,LAYER.NAME3 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif HeatmapProcessor : 110 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) -``` - -Dans l'exemple ci-après, on a 59 requêtes pris en compte pour générer l'image, en fonction des filtres choisis et de la zone couverte par la carte de chaleur: -```sh -tmsizer -i requests.txt --tms PM -io levels=0,15 -io layer=LAYER.NAME2 -if GETTILE_PARAMS -of HEATMAP -oo bbox=65000,6100000,665000,6500000 -oo dimensions=600x400 -o heatmap.tif -HeatmapProcessor : 59 hits on image with dimensions (600, 400) and bbox (65000.0, 6100000.0, 665000.0, 6500000.0) (resolutions (1000.0, 1000.0)) ``` \ No newline at end of file From b3daa7e06d348589c59f81137bf90cbb4f54c1f5 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 09:28:34 +0200 Subject: [PATCH 19/24] HOWTO.md : correction exemple sur plusieurs lignes --- HOWTO.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 13edce2..09391cf 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -2,7 +2,12 @@ ### PYR2PYR : un exemple de ligne de commande à lancer : ```sh -pyr2pyr --role check --conf path_to_file/PM.json | pyr2pyr --role master --conf path_to_file/PM.json | pyr2pyr --role agent --conf path_to_file/PM.json --split 3 | pyr2pyr --role finisher --conf path_to_file/PM.json +pyr2pyr --role check --conf path_to_file/PM.json +pyr2pyr --role master --conf path_to_file/PM.json +pyr2pyr --role agent --conf path_to_file/PM.json --split 1 +pyr2pyr --role agent --conf path_to_file/PM.json --split 2 +pyr2pyr --role agent --conf path_to_file/PM.json --split 3 +pyr2pyr --role finisher --conf path_to_file/PM.json ``` ### JOINCACHE : Exemple de fichier de configuration : From 6364eed11997d23745909297c38c5510dd24888f Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 09:30:36 +0200 Subject: [PATCH 20/24] HOWTO.md : ajout d'un commentaire plus explicite --- HOWTO.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index 09391cf..ca3b8fc 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -4,9 +4,13 @@ ```sh pyr2pyr --role check --conf path_to_file/PM.json pyr2pyr --role master --conf path_to_file/PM.json + +# Les lignes de commandes suivantes contenant l'option split peuvent être lancées en parallèle + pyr2pyr --role agent --conf path_to_file/PM.json --split 1 pyr2pyr --role agent --conf path_to_file/PM.json --split 2 pyr2pyr --role agent --conf path_to_file/PM.json --split 3 + pyr2pyr --role finisher --conf path_to_file/PM.json ``` From d28250320b82e1af9620dd0a25c61320aa6960ed Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Thu, 15 May 2025 09:38:08 +0200 Subject: [PATCH 21/24] HOWTO.md : correction indentation --- HOWTO.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index ca3b8fc..1af1d33 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -57,9 +57,20 @@ make-layer --pyramids s3://pyramids/ALTI.json --name ALTI_data --styles normal ``` Voici le fichier de résultats au format JSON `ALTI_data.json` obtenu : ```json -{"title": "ALTI_data", "abstract": "bicubic", "keywords": ["RASTER", "my_data"], "wmts": {"authorized": true}, "tms": {"authorized": true}, "bbox": {"south": 14.221788628396906, "west": -61.435546874999375, - "north": 14.944784875087676, "east": -60.64453124999938}, "pyramids": [{"bottom_level": "13", "top_level": "0", "path": "s3://pyramids/ALTI.json"}], "wms": {"authorized": true, "crs": ["CRS:84", "IGNF:WG -S84G", "EPSG:3857", "EPSG:4258", "EPSG:4326"]}, "styles": ["normal", "normal"], "resampling": "nn"} +{ "title": "ALTI_data", + "abstract": "bicubic", + "keywords": ["RASTER", "my_data"], + "wmts": {"authorized": true}, + "tms": {"authorized": true}, + "bbox": {"south": 14.221788628396906, + "west": -61.435546874999375, + "north": 14.944784875087676, + "east": -60.64453124999938}, + "pyramids": [{"bottom_level": "13", "top_level": "0", "path": "s3://pyramids/ALTI.json"}], + "wms": {"authorized": true, "crs": ["CRS:84", "IGNF:WGS84G", "EPSG:3857", "EPSG:4258", "EPSG:4326"]}, + "styles": ["normal", "normal"], + "resampling": "nn" +} ``` ### PYROLYSE : un exemple de ligne de commande à lancer : From 011fbc46782d0a4aab2f93b98a5e7a101c5aae7b Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 16 May 2025 07:38:46 +0200 Subject: [PATCH 22/24] =?UTF-8?q?HOWTO.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/HOWTO.md b/HOWTO.md index 1af1d33..f2fccc4 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -67,7 +67,10 @@ Voici le fichier de résultats au format JSON `ALTI_data.json` obtenu : "north": 14.944784875087676, "east": -60.64453124999938}, "pyramids": [{"bottom_level": "13", "top_level": "0", "path": "s3://pyramids/ALTI.json"}], - "wms": {"authorized": true, "crs": ["CRS:84", "IGNF:WGS84G", "EPSG:3857", "EPSG:4258", "EPSG:4326"]}, + "wms": { + "authorized": true, + "crs": ["CRS:84", "IGNF:WGS84G", "EPSG:3857", "EPSG:4258", "EPSG:4326"] + }, "styles": ["normal", "normal"], "resampling": "nn" } From 63b3a4fcbe9184065fdaf487885989a8086be437 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 16 May 2025 08:00:39 +0200 Subject: [PATCH 23/24] =?UTF-8?q?HOWTO.md=20:=20esth=C3=A9tique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/HOWTO.md b/HOWTO.md index f2fccc4..be726e1 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -52,9 +52,11 @@ pyr2pyr --role finisher --conf path_to_file/PM.json ``` ### MAKELAYER : un exemple de ligne de commande à lancer : + ```sh make-layer --pyramids s3://pyramids/ALTI.json --name ALTI_data --styles normal --title ALTI --resampling bicubic --directory . ``` + Voici le fichier de résultats au format JSON `ALTI_data.json` obtenu : ```json { "title": "ALTI_data", @@ -77,6 +79,7 @@ Voici le fichier de résultats au format JSON `ALTI_data.json` obtenu : ``` ### PYROLYSE : un exemple de ligne de commande à lancer : + ```sh pyrolyse --pyramid s3://pyramids/ALTI.json --output resultats.json --tiles --progress --deciles --ratio 1 ``` From fdb7df4a60b3482d4232125cb388f15cb6214580 Mon Sep 17 00:00:00 2001 From: Francois Bacquelot Date: Fri, 16 May 2025 09:48:22 +0200 Subject: [PATCH 24/24] =?UTF-8?q?HOWTO.md=20&=20README.md=20=20:=20correct?= =?UTF-8?q?ions=20suite=20remarques=20de=20Th=C3=A9o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HOWTO.md | 22 ++++++++++++++++++++++ README.md | 2 -- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/HOWTO.md b/HOWTO.md index be726e1..319ce92 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,6 +1,14 @@ ## Exemple de cas d'utilisations des fichiers exécutables du projet ROK4 ### PYR2PYR : un exemple de ligne de commande à lancer : + +Cet exemple s'appuie sur l'image docker rok4/dataset en lançant la commande suivante depuis le dépôt comme suit : +```sh +docker run -p 9000:9000 -p 9001:9001 rok4/dataset:minio +``` + +et une interface graphique de gestion est disponible à l'URL http://localhost:9001/buckets (accès : rok4 / rok4S3storage) : + ```sh pyr2pyr --role check --conf path_to_file/PM.json pyr2pyr --role master --conf path_to_file/PM.json @@ -53,6 +61,13 @@ pyr2pyr --role finisher --conf path_to_file/PM.json ### MAKELAYER : un exemple de ligne de commande à lancer : +Cet exemple s'appuie sur l'image docker rok4/dataset en lançant la commande suivante depuis le dépôt comme suit : +```sh +docker run -p 9000:9000 -p 9001:9001 rok4/dataset:minio +``` + +et une interface graphique de gestion est disponible à l'URL http://localhost:9001/buckets (accès : rok4 / rok4S3storage) : + ```sh make-layer --pyramids s3://pyramids/ALTI.json --name ALTI_data --styles normal --title ALTI --resampling bicubic --directory . ``` @@ -80,6 +95,13 @@ Voici le fichier de résultats au format JSON `ALTI_data.json` obtenu : ### PYROLYSE : un exemple de ligne de commande à lancer : +Cet exemple s'appuie sur l'image docker rok4/dataset en lançant la commande suivante depuis le dépôt comme suit : +```sh +docker run -p 9000:9000 -p 9001:9001 rok4/dataset:minio +``` + +et une interface graphique de gestion est disponible à l'URL http://localhost:9001/buckets (accès : rok4 / rok4S3storage) : + ```sh pyrolyse --pyramid s3://pyramids/ALTI.json --output resultats.json --tiles --progress --deciles --ratio 1 ``` diff --git a/README.md b/README.md index 243ba0f..0dd30f5 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,6 @@ Installations système requises : Depuis [PyPI](https://pypi.org/project/rok4-tools/) : `pip install rok4-tools` -Taper l'url suivante : `https://github.com/rok4/pytools/releases/` puis cliquez sur : `rok4_tools-x.y.z-py3-none-any.whl` puis télécharger en dehors du dépôt `pytools`. - Depuis [GitHub](https://github.com/rok4/pytools/releases/) : `pip install https://github.com/rok4/pytools/releases/download/x.y.z/rok4_tools-x.y.z-py3-none-any.whl` L'environnement d'exécution doit avoir accès aux librairies système. Dans le cas d'une utilisation au sein d'un environnement python, précisez bien à la création `python3 -m venv --system-site-packages .venv`.