web-dev-qa-db-fra.com

ConfigParser vs import config

ConfigParser est le très débatt analyseur de configuration Vanilla pour Python.
Cependant, vous pouvez simplement import configconfig.py a python code qui définit les paramètres de configuration.

Quels sont les avantages/inconvénients de ces deux approches de configuration? Quand devrais-je choisir chacun?

30
Jonathan

Le plus gros problème que je vois avec import config est que vous ne savez pas quoi se produira lorsque vous l'importerez. Oui, vous obtiendrez un ensemble de symboles qui sont naturellement référencés à l'aide d'un . interface de style. Mais le code du fichier de configuration peut aussi faire qui-sait-quoi. Maintenant, si vous faites entièrement confiance à vos utilisateurs, leur permettre de faire tout ce qu'ils ressentent dans le fichier de configuration est peut-être une bonne chose. Cependant, si vous avez des quantités inconnues, ou si vous souhaitez protéger les utilisateurs contre eux-mêmes, alors avoir un fichier de configuration dans un format plus traditionnel sera plus sûr et plus sécurisé.

21
Nathan

Cela dépend entièrement de vos besoins et objectifs pour le script. Une façon n'est vraiment pas "meilleure", juste différente. Pour une discussion très détaillée sur la plupart des analyseurs de configuration de pythons (y compris les modules ConfigParser et config), voir:

Wiki Python - ConfigParserShootout

7
chown

"import config" est très simple, flexible et puissant mais, comme il peut tout faire, il pourrait être dangereux si config.py n'est pas dans un endroit sûr.

6
dugres

OMI, cela se résume à une question de style personnel. Avez-vous l'intention que des tiers modifient votre configuration? Si c'est le cas, il est peut-être logique d'avoir un style de configuration plus "naturel" à la ConfigParser qui n'est pas aussi technique et qui ne soit pas trop loin au-dessus de la tête de votre public cible.

De nombreux projets populaires tels que Fabric et Django utilisent le style de configuration "natif" qui est essentiellement juste un module Python. Fabry a fabfile.py et Django a settings.py.

Dans l'ensemble, vous allez avoir beaucoup plus de flexibilité en utilisant une approche native d'importation d'un module simplement parce que vous pouvez faire tout ce que vous voulez dans ce fichier, y compris définir des fonctions, des classes, etc. parce que c'est juste un autre Python module que vous importez.

3
jathanism