2011-07-24 8 views
1

Quel serait un moyen facile de partager les paramètres de configuration \ settings \ constants entre différents projets en Python? L'utilisation d'une base de données semble être une surpuissance. L'utilisation d'un fichier pose la question de savoir quel projet devrait héberger le fichier dans son contrôle de code source ...Partage des paramètres constantes entre les projets Python

Je suis ouvert aux suggestions :)

MISE À JOUR:
Pour plus de précisions - Assumer les différents projets sont déployés différemment sur différents systèmes. Dans certains cas, dans des répertoires différents, dans d'autres cas, certains projets existent et d'autres non.

+0

J'ai juste ajouté + quatre réponses au moment où j'ai écrit ceci, ce qui suggère que vous n'indiquez pas clairement quel est le problème. – msw

Répondre

3

Créer un package Python et l'importer dans les différents projets ...

5

Je trouve que, dans de nombreux cas, en utilisant un fichier de configuration est vraiment le (mineur) tracas. Le module intégré ConfigParser est très pratique, en particulier le fait qu'il est vraiment facile d'analyser plusieurs fichiers et de laisser le module les fusionner ensemble, avec des valeurs dans les fichiers analysés plus tard, remplaçant les valeurs des fichiers analysés précédemment. Cela permet d'utiliser facilement un fichier global (par exemple /etc/yoursoftware/main.ini) et un fichier par utilisateur (~/.yoursoftware/main.ini). Chacun de vos projets ouvrirait alors le fichier de configuration et en lirait les valeurs.

est ici un petit exemple de code:

basefile.ini:

[sect1] 
value1=1 
value2=2 

overridingfile.ini:

[sect1] 
value1=3 

configread.py:

#!/usr/bin/env python 

from ConfigParser import ConfigParser 

config = ConfigParser() 
config.read(["basefile.ini", "overridingfile.ini"]) 

print config.get("sect1", "value1") 
print config.get("sect1", "value2") 

L'exécution de ce serait imprimer:

3 
2 
+0

ConfigParser est très utile, et je l'utilise déjà. Cependant, ce que j'essaie de comprendre comment * partager * ces constantes * entre les projets *. – Jonathan

3

Pourquoi avez-vous pas seulement un fichier nommé constants.py et juste avoir CONSTANT = valeur

+0

Voir la mise à jour pour clarification. Je ne vois pas comment un simple fichier constants.py fonctionnerait. Je devrais le maintenir dans chaque projet ... – Jonathan

+0

Si elles sont des constantes qui suggèrent qu'elles sont constantes. Comment 'import my.constant.user' fonctionnerait-il dans votre scénario si' my/constant/user.py' n'était pas également déployé avec le reste du code? Une fois que vous répondez à cela, 'my.constant.initializer.py' ou' my/constants.py' devrait se déployer de la même manière. – msw

+0

Créez un paquet et installez-le dans le répertoire de la bibliothèque de python (je ne me souviens pas du répertoire spécifique) – Pwnna

2

Pourquoi une surpuissance de base de données? Vous décrivez le partage de données entre différents projets situés sur différents systèmes physiques avec des chemins différents vers le répertoire de chaque projet. Oh, et parfois les projets ne sont tout simplement pas là. Je ne peux pas imaginer un meilleur moyen de communiquer les données. Il ne doit s'agir que d'une seule table, ce qui n'est pas excessif si elle fournit l'accès cohérent dont vous avez besoin sur les plates-formes, les ordinateurs et même les réseaux.

+0

Un DB résoudra cela bien sûr. Je peux utiliser un modèle d'attribut-valeur qui desserrerait le couplage. Cependant, dans cette question, j'essaie de trouver la meilleure alternative. +1 car cela va bien sûr résoudre le problème. – Jonathan

Questions connexes