【问题标题】:Sharing settings\constants between Python projects在 Python 项目之间共享设置\常量
【发布时间】:2011-07-24 09:16:49
【问题描述】:

在 Python 中的各个项目之间共享配置参数\设置\常量的一种巧妙方法是什么?

使用数据库似乎有点过头了。使用文件会引发一个问题,即哪个项目应该在其源代码管理中托管文件...

我愿意接受建议:)

更新:
为了澄清 - 假设不同的项目在不同的系统上以不同的方式部署。在某些情况下在不同的目录中,在其他情况下,有些项目存在,有些不存在。

【问题讨论】:

标签: python constants projects


【解决方案1】:

我发现在许多情况下,使用配置文件确实值得(次要的)麻烦。内置的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

【讨论】:

  • ConfigParser 非常有用,我实际上已经在使用它了。但是,我想弄清楚如何在项目之间共享​​>这些常量。
【解决方案2】:

你为什么不只拥有一个名为 constants.py 的文件并且只拥有 CONSTANT = value

【讨论】:

  • 请参阅更新以获得说明。我看不出一个简单的 constants.py 文件是如何工作的。我必须在每个项目中维护它......
  • 如果它们是常量,则表明它们是常量。如果 my/constant/user.py 没有与其余代码一起部署,import my.constant.user 如何在您的场景中工作?一旦你回答了这个问题,my.constant.initializer.pymy/constants.py 应该以相同的方式部署。
  • 打个包安装到python的库目录下(具体目录不记得了)
【解决方案3】:

创建一个 Python 包并将其导入到各个项目中...

【讨论】:

    【解决方案4】:

    为什么数据库是多余的?您正在描述在位于不同物理系统上的不同项目之间共享数据,每个项目的目录具有不同的路径。哦,有时项目不存在。我无法想象有更好的数据通信方式。它只需要一个表,如果它提供跨平台、计算机甚至网络所需的一致访问,这几乎不会过分。

    【讨论】:

    • 数据库当然会解决这个问题。我可以使用会松散耦合的属性值模型。但是,在这个问题中,我试图寻找下一个最佳选择。 +1,因为这当然可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多