python - 使用 setuptools 创建符号链接(symbolic link)

标签 python django configuration setuptools configuration-management

Django 从未想出如何处理配置的标准方法。 Django 默认将其放入项目目录的 settings.py 中,这不太实用,因为您不想覆盖 /usr/lib/python3/{site, dist}-packages/someproject/ 来配置你的项目。此外,该文件将在软件包升级后消失。

我想以至少与 sdist、bdist wheel 和 bdist deb 在 linux 上一起工作的方式打包一个 django 项目,并包含/创建来自 /usr/lib/python3/{site,dist} 的符号链接(symbolic link)-packages/someproject/settings.py/etc/someproject/settings.py。这似乎是一项不可能完成的壮举。

另一种方法是执行 /etc/ 中的设置,感觉有点脏。

最佳答案

考虑通过将 Django 配置放在环境变量中来避免此问题,并在 settings.py 中使用合理的默认值。在阅读 The Twelve-Factor App 后,我们的团队已改用此技术。 .

Env vars are easy to change between deploys without changing any code; unlike config files, there is little chance of them being checked into the code repo accidentally; and unlike custom config files, or other config mechanisms such as Java System Properties, they are a language- and OS-agnostic standard.

以下是我们的 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,因为您可以包含评论。

关于python - 使用 setuptools 创建符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53317327/

相关文章:

python - 有没有办法获取DRF中所有ManyToMany相关的对象

python - 无法使用从本地文件读取的正确凭据(用户名和密码)向 SSH 服务器进行身份验证

python - ModelForm 未正确插入数据

python - Django 2.0.7 URL app_name 如何工作

configuration - 为基于 Spring Cloud Netflix 的 Eureka Server 设置对等感知

eclipse - 无法从 Web 应用程序库中删除 jar

python - absl.flags 错误 : Trying to access flag before flags were parsed

python - 解构赋值和 "normal"赋值有什么区别?

python - 带有动态前缀的 Django URL

php - 在访问$_POST、$_GET等变量时避免在PHP中使用isset?