Python 应用配置最佳实践

标签 python configuration flask ini

我知道之前已经讨论过这个问题,但我正在努力寻找关于如何在本地开发和生产服务器之间进行配置的清晰明了的解释。

到目前为止我做了什么:我有一个 my_app_config.py 文件,其中有一个包含机器/场景(测试与生产)部分的部分,我可以将其注释掉.我会使用硬编码的本地机器路径、测试数据库连接字符串、我的测试电子表格位置等进行开发。当需要将代码部署到服务器时,我注释掉“测试”部分并取消注释“生产部分”。您可能会猜到,这是由错误造成的。

我最近采用了 Python ConfigParser 库来使用 .ini 文件。现在,我的代码中有以下几行

import ConfigParser
config = ConfigParser.RawConfigParser()
config.read(os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'settings',
                                                     'my_app_config.ini')))
database_connect_string_admin = config.get('Database', 'admin_str')

这个问题很多...

  1. 我需要在每个文件的顶部导入
  2. 文件名 my_app_config.ini 不能更改。因此,我依靠 .ini 文件的 content 中的注释来了解我正在处理的是哪一个。它们存储在文件夹树中,所以我知道哪个是哪个。
  3. 注意这里定义了配置文件的路径。因此,取决于 python 文件在树结构中的位置决定了我是否会收到复制/粘贴错误。

我尝试在程序开始时设置环境变量,但所有模块的所有导入都在代码启动时立即执行。我不断收到“未找到”错误。

我想要的:了解如何将所有配置存储在一个地方,这样就不容易忘记我在做什么。我想要一种简单的方法来将这些配置文件(最好是一个文件或脚本)置于版本控制之下(安全性是另一个问题,我离题了)。我希望能够无缝切换上下文(本地测试、本地生产、serverA 测试、serverA 生产、serverB 测试、serverB 生产)我的应用程序使用

  1. my_app_config.ini 由我的解析器读取
  2. uwsgi.ini uwsgi应用服务器皇帝读取
  3. web_config.py 由 flask 应用程序使用
  4. nginx.conf 符号链接(symbolic link)到 Web 服务器的配置
  5. celery 配置

更不用说所有东西的不同路径(最好在魔术配置处理 Sprite 中处理)。我想一旦我弄明白了这一点,我会为花了这么长时间才掌握而感到尴尬。

环境变量是我在这里尝试做的吗?

最佳答案

你必须尝试`simple-settings .它将解决您所有的问题。一种设置环境变量的方法

开发中

$ export SIMPLE_SETTINGS=settings.general,settings.development
$ python app.py

生产中

$ export SIMPLE_SETTINGS=settings.general,settings.production
$ python app.py

出于安全原因,您可以将“development.pyproduction.py”保留在存储库中。

例子

设置/通用.py

SIMPLE_CONF = 'simple'

应用.py

from simple_settings import settings

print(settings.SIMPLE_CONF)

文档指出了更多的特性和优势。

关于Python 应用配置最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26999101/

相关文章:

configuration - Cucumber - 如何将其配置为默认使用 "--format pretty"?

使用单个配置文件在 CC.NET 中进行电子邮件组配置

c# - Visual Studio 2013 深色主题折叠文本颜色几乎不可见

python - 使用 Python 向 Apple Notification Service 发送消息

python flask ImmutableMultiDict

python - 如何在 Koding.com 上部署 Flask 应用程序

python - 图像螺旋像素搜索

python - 在Python中导入elasticsearch.helpers时出现ImportError

python - 有没有办法动态创建跟踪,例如堆叠条形图?

Python 和 re.compile 返回不一致的结果