使用setuptools创建符号链接


Django从未提出过处理配置的标准方法。Django默认情况下会将其放入项目目录中的settings.py中,这不是很可行,因为您不想覆盖/usr/lib/python3/{site,dist}-packages/someproject/中的文件来配置您的项目。此外,该文件将在软件包升级后消失。

我想打包一个django项目,它至少可以在linux上使用sdist、bdist-wheel和bdist-deb,并包括/创建从/usr/lib/python3/{site,dist}-packages/someproject/settings.py/etc/someproject/settings.py的符号链接。这似乎是一个不可能的壮举。

另一种选择是执行/etc/中的设置,这感觉有点脏。

考虑通过将Django配置放在环境变量中来避免这个问题,在settings.py中使用合理的默认值。我们的团队在阅读了The Twelve Factor应用程序后,已经转向了这种技术。

Env变量可以在部署之间轻松更改,而无需更改任何代码;与配置文件不同,它们被意外检入代码回购的可能性很小;与自定义配置文件或其他配置机制(如Java系统属性(不同,它们是一种与语言和操作系统无关的标准。

以下是我们的settings.py中的几个示例,它们从合理的默认值开始,然后读取环境变量以检查覆盖。

EMAIL_HOST = os.environ.get("MYAPP_EMAIL_HOST", "localhost")
# This is a list of lists in JSON, for example:
# export MYAPP_ADMINS='[["Your Name", "your_email@example.com"]]'
ADMINS = json.loads(os.environ.get("MYAPP_ADMINS", "[]"))

在选择默认值时,考虑让新开发人员更容易地设置项目,以及在默认情况下确保项目的安全。

您可以看到,EMAIL_HOST示例是一个简单的字符串,而ADMINS示例从JSON字符串加载更多的结构。更复杂的设置,如LOGGING,可能难以从环境变量加载。从环境变量(如日志记录级别(加载设置的小部分,或者使用环境变量将路径传递到JSON、YAML或INI文件。就我个人而言,我更喜欢YAML而不是JSON,因为您可以包含注释。

相关内容

  • 没有找到相关文章

最新更新