打包django应用程序有什么好方法?

时间:2009-08-28 18:05:36

标签: django packaging

我有一个django项目,由客户安装在他们的服务器上。我还有一些应用程序,它们是可以安装/卸载的可选功能插件。

我想要一种简单的方法来打包这些插件应用程序,使安装/卸载无痛。我不希望他们将模板文件复制到一个目录,将app复制到另一个目录,将媒体复制到第三个目录,依此类推。我希望他们不需要编辑settings.py,但如果它没有帮助就可以。

理想的情况是,如果他们可以简单地解压缩到python路径上的某个位置(可能是一个特殊的插件目录?),并将其删除以卸载。是否有一种简单的方法来打包应用程序,以便以这种方式安装它们?

2 个答案:

答案 0 :(得分:4)

我将跳过对Python打包(distutils,setuptools,pip等)的讨论,因为听起来你更喜欢使用简单的zip文件或tarball。我会解决你一次提到的“痛点”:

模板文件:只要项目的TEMPLATE_LOADERS设置中包含“django.template.loaders.app_directories.load_template_source”,就不必担心这个问题。您的每个应用都可以有一个“templates /”子目录,其中的模板将被加载,就像它们位于项目范围的模板目录中一样。

媒体文件:App媒体很痛苦。对于开发,您可以使用与app_directories模板加载器类似的自定义serve_media视图(在每个应用程序中查找媒体)。在生产中,您必须复制文件,使用符号链接或使用Web服务器级别名。有几个实用程序应用程序试图平滑这个问题;我现在使用django-staticfiles

编辑settings.py :没有简单的方法来解决这个问题。要使其模型,模板标签,管理命令等工作,必须在INSTALLED_APPS中列出应用程序。你可以做的是在settings.py中写一些自定义代码,列出某个目录的内容,并动态地将它找到的包添加到INSTALLED_APPS。有点危险(仔细考虑谁有权将文件放在该目录中,因为它们具有你王国的钥匙),并且只有在服务器重新加载时才能检测到新文件,但它应该有效。

我认为如果你把这些解决方案放在一起,就可以实现理想的情况:解压缩安装,删除卸载。

答案 1 :(得分:1)

编辑settings.py :您的插件可以在自己的目录中从自己的设置文件中读取其设置。他们只需要编辑root settings.py来添加/删除“INSTALLED_APPS”中的插件路径。

相关问题