Exemple de comment lire un fichier depuis un sous-répertoire d'un package en python:
Introduction
Supposons que nous voulons créer un nouveau package python (appelé "ideas4eo") à partir de zéro et que nous stockons des données dans un fichier json situé dans un sous-répertoire (ideas4eo/data/user):
ideas4eo/data/user/__init__.pyconfig.jsondata_order/__init__.pynasa_laads_daac.py
le fichier config.json (contient un "token" utilisateur) :
{"nasa_laads_daac": {"token": "123456789"}}
et nous devons lire le fichier json à partir d'un script python appelé nasa_laads_daac.py situé dans le sous-répertoire ideas4eo/data_order.
(Option 1) Créer une fonction qui lit un fichier depuis un sous-répertoire d'un package python
Si vous essayez de lire le fichier json à partir de nasa_laads_daac.py en utilisant un chemin relatif ('../data/user/data.json'), cela ne fonctionnera pas :
import jsonwith open('../data/user/data.json') as json_data:config_data = json.load(json_data)token = config_data['nasa_laads_daac']['token']
Pour lire le fichier json, une solution consiste à utiliser pkg_resources de setuptools, exemple
import pkg_resourcesimport jsondef get_token():err_msg = []try:data_path = pkg_resources.resource_filename('ideas4eo.data.user', 'config.json')with open(data_path) as json_data:config_data = json.load(json_data)token = config_data['nasa_laads_daac']['token']except:err_msg.append("Token Not found")token = -1return err_msg, token
(Option 2) Créer une fonction qui lit un fichier depuis un sous-répertoire d'un package python
Une autre solution possible consiste à utiliser importlib.resources – Resources. Voir l'article de stackoverflow: How to read a (static) file from inside a Python package? pour en apprendre plus.
Tester si le fichier est lu
Pour tester si cela fonctionne, lancez python en dehors du package (par exemple juste au-dessus du répertoire ideas4eo) et entrez
>>> import ideas4eo.data_order.nasa_laads_daac as t>>> t.get_token()'123456789'
