这里是我的原因,我认为这将是错误的:
- 它是没有什么大的需要额外的代码的复杂性,每一次添加一行来设置并不坏,特别是如果你正在做的一步#1和#3。
- 它将变得不明确你的项目使用什么应用程序。当另一名开发人员在您的项目上工作时,他可能不知道您的应用程序已安装。
- 您应该在代码版本控制系统上执行第1步和第2步,测试整个系统,然后提交更改并进行部署。
如果您正在寻找这样的“优化”,我认为您在开发/部署过程中出现了问题(从我的角度来看)。我认为使用INSTALLED_APPS
更容易和更好。
如果你正在建造一些供公众使用的东西,并且你想尽可能简单地添加模块,那么它会很好。在这种情况下,我会建议将项目和它的应用程序打包为python egg并利用入口点。然后,您可以将应用部署到项目中,如下所示:
pip install my-app-name
即使没有第1步和第3步!步骤#1将通过pip
完成,步骤#2和#3将通过项目中定义的安装钩子来完成。
Paste script为切入点利用的一个很好的例子:
# Install paste script:
pip install pastescript
# install django templates for pastescript:
pip install fez.djangoskel
# now paste script knows about fez.djangoskel because of entry-points
# start a new django project from fez's templates:
paste create -t django_buildout
这里是fez.djangoskel包的setup.py
部分:
...
entry_points="""
[paste.paster_create_template]
django_buildout=fez.djangoskel.pastertemplates:DjangoBuildoutTemplate
django_app=fez.djangoskel.pastertemplates:DjangoAppTemplate
...
zc.buildout是另一个伟大的工具,它可能使你的部署更容易。 Python鸡蛋搭建起来非常棒。
来源
2011-09-06 19:08:37
Ski
(1)实际上它不仅仅是1行。这是在不同地方的几行。我可以用同样的方法来完成所有这些。1和3不会手动完成,它们也会自动完成。 (2)为什么不明确?该脚本会明确将其添加到INSTALLED_APPS。任何开发人员都可以通过查看settings.py来看到更新。 (3)不能。这是一个附加组件; settings.py可能会以我不想触及的其他方式进行更改,因此版本控制它不起作用。出于同样的原因,PIP将不起作用。我没有可以插入钩子的静态settings.py文件.-- – mpen
- 因为settings.py由第三方维护。 – mpen
@Mark,您可以拥有自己的设置文件,并且可以使用'from client_settings import *'加载第三方设置。然后,您可以动态修改INSTALLED_APPS属性。 – Ski