【发布时间】:2011-07-24 09:16:49
【问题描述】:
在 Python 中的各个项目之间共享配置参数\设置\常量的一种巧妙方法是什么?
使用数据库似乎有点过头了。使用文件会引发一个问题,即哪个项目应该在其源代码管理中托管文件...
我愿意接受建议:)
更新:
为了澄清 - 假设不同的项目在不同的系统上以不同的方式部署。在某些情况下在不同的目录中,在其他情况下,有些项目存在,有些不存在。
【问题讨论】:
在 Python 中的各个项目之间共享配置参数\设置\常量的一种巧妙方法是什么?
使用数据库似乎有点过头了。使用文件会引发一个问题,即哪个项目应该在其源代码管理中托管文件...
我愿意接受建议:)
更新:
为了澄清 - 假设不同的项目在不同的系统上以不同的方式部署。在某些情况下在不同的目录中,在其他情况下,有些项目存在,有些不存在。
【问题讨论】:
我发现在许多情况下,使用配置文件确实值得(次要的)麻烦。内置的ConfigParser 模块非常方便,尤其是解析多个文件并让模块将它们合并在一起非常容易,稍后解析的文件中的值会覆盖之前解析的文件中的值。这样可以轻松使用全局文件(例如 /etc/yoursoftware/main.ini)和每个用户文件(~/.yoursoftware/main.ini)。
然后,您的每个项目都会打开配置文件并从中读取值。
这是一个小代码示例:
basefile.ini:
[sect1]
value1=1
value2=2
覆盖文件.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")
运行它会打印出来:
3
2
【讨论】:
你为什么不只拥有一个名为 constants.py 的文件并且只拥有 CONSTANT = value
【讨论】:
my/constant/user.py 没有与其余代码一起部署,import my.constant.user 如何在您的场景中工作?一旦你回答了这个问题,my.constant.initializer.py 或 my/constants.py 应该以相同的方式部署。
创建一个 Python 包并将其导入到各个项目中...
【讨论】:
为什么数据库是多余的?您正在描述在位于不同物理系统上的不同项目之间共享数据,每个项目的目录具有不同的路径。哦,有时项目不存在。我无法想象有更好的数据通信方式。它只需要一个表,如果它提供跨平台、计算机甚至网络所需的一致访问,这几乎不会过分。
【讨论】: