繁体   English   中英

使用setuptools创建符号链接

[英]Create a symlink with setuptools

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

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

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

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

在不更改任何代码的情况下,可以在部署之间轻松更改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,因为你可以包含评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM