我会跳过Python打包(的distutils,setuptools的,画中画等)的讨论,因为它听起来就像你更喜欢使用简单的zip文件或压缩包。我会解决“痛点”,你提到一次一个:
模板文件:只要你有“django.template.loaders.app_directories.load_template_source”包含在你的项目的TEMPLATE_LOADERS设置,你不应该担心这个。每个应用程序都可以有一个“templates /”子目录,其中的模板将被加载,就像它们在您的项目范围的模板目录中一样。
媒体文件:应用介质是一种痛苦。对于开发,您可以使用与app_directories模板加载器类似的自定义serve_media视图(在每个应用程序中查找媒体)。在生产中,您必须复制文件,使用符号链接或使用Web服务器级别别名。有几个实用程序应用程序试图缓解这个问题;我现在使用django-staticfiles。
编辑settings.py:围绕这一没有简单的方法。要使其模型,模板标签,管理命令等起作用,必须在INSTALLED_APPS中列出应用程序。你可以做的是在settings.py中写一些自定义代码,它列出了某个目录的内容,并动态地将它找到的包添加到INSTALLED_APPS。有点危险(仔细考虑谁有权将文件放在该目录中,因为他们有你的王国的钥匙),并且只有在服务器重新加载时才能检测到新文件,但它应该可以工作。
我认为,如果你放在一起这些解决方案,它可以实现你理想的情况:解压安装,删除卸载。
感谢您链接到djano-media-utils。那是机制中最大的痛苦。希望我们也可以指定多个媒体目录。 我想动态地添加到INSTALLED_APPS是一个选项。由于您需要访问服务器以放置插件,因此他们安装人员可以访问所有文件。你以前试过这个吗? – Siddhi 2009-08-29 04:30:32
不,我从来没有试过动态的INSTALLED_APPS设置。在概念上,没有太复杂的东西。在实践中,有一个问题可能是需要在插件目录中添加/删除应用程序时重新启动生产Web服务器。另外,如果插件应用程序可以包含模型,则需要制定必要的syncdb计划。 – 2009-08-29 14:27:14