Impossible de charger le fichier de configuration relatif à l'aide de ConfigParser à partir du sous-répertoire
J'ai la structure de répertoire suivante:
my_program/
foo.py
__init__.py # empty
conf/
config.cfg
__init__.py
Dans foo.py j'ai ceci:
import sys
#sys.path.append('conf/')
import ConfigParser
config = ConfigParser.ConfigParser()
config.read( 'conf/config.cfg' )
Dans conf/__init__.py
j'ai
__all__ = ["config.cfg"]
J'obtiens cette erreur dans foo.py
que je peux le résoudre en donnant le chemin complet, mais pas quand je viens de mettre conf/config.cfg
mais je veux que le chemin d'accès relatif au travail:
ConfigParser.NoSectionError
ce qui signifie que le fichier ne peut pas être chargé (donc il ne peut pas lire l'article).
J'ai essayé de commenter/décommentant sys.path.append('conf/')
dans foo.py
mais il ne fait rien.
Des idées? Merci beaucoup.
source d'informationauteur ale
Vous devez vous connecter pour publier un commentaire.
Chemins sont relatifs à la répertoire de travail courantce qui est généralement le répertoire à partir duquel vous exécutez votre programme (mais le répertoire courant peut être modifié par votre programme [programme ou un module] et il est en général pas le répertoire de votre fichier de programme).
Une solution consiste à calculer automatiquement le chemin d'accès à votre fichier, par le biais de la
__file__
variable de l'interpréteur Python crée pour vous dansfoo.py
:Explication: Le
__file__
variable de chaque programme (module) contient son chemin (relatif au répertoire courant quand elle est chargée, je pense—je n'ai rien trouvé de concluant dans la documentation Python). En la convertissant en un chemin d'accès absolu traite mieux le cas général où le module change le répertoire de travail en cours avant deconfig.read()
et où__file__
est un chemin d'accès relatif (ce qui arrive par exemple lorsquefoo.py
est importé à partir de son propre répertoire).De cette façon, l'importation fonctionne correctement quel que soit le répertoire de travail en cours, et d'où vous mettre votre paquet.
PS: note de Côté:
__all__ = ["config.cfg"]
n'est pas ce que vous voulez: il dit à Python quels symboles (variables, fonctions) à l'importation lorsque vous nefrom conf import *
. Il devrait être supprimé.