我将跳过对 Python 打包(distutils、setuptools、pip 等)的讨论,因为听起来您更喜欢使用简单的 zip 文件或 tarball。我将一次解决您提到的“痛点”:
模板文件:只要您的项目的 TEMPLATE_LOADERS 设置中包含“django.template.loaders.app_directories.load_template_source”,您就不必担心这个。您的每个应用程序都可以有一个“templates/”子目录,其中的模板将被加载,就像它们在您的项目范围的模板目录中一样。
媒体文件:应用媒体很痛苦。对于开发,您可以使用与 app_directories 模板加载器类似的操作的自定义 serve_media 视图(在每个应用程序中查找媒体)。在生产中,您必须复制文件、使用符号链接或使用网络服务器级别的别名。有几个实用应用程序试图解决这个问题。我现在使用django-staticfiles。
编辑 settings.py:解决这个问题没有简单的方法。要使其模型、模板标签、管理命令等工作,应用程序必须在 INSTALLED_APPS 中列出。你可以做的是在你的 settings.py 中编写一些自定义代码,列出某个目录的内容,并将它在那里找到的包动态添加到 INSTALLED_APPS。有点危险(仔细考虑谁有权在该目录中放置文件,因为他们拥有您王国的密钥),并且只有在服务器重新加载时才会检测到新文件,但它应该可以工作。
我认为如果您将这些解决方案放在一起,就有可能实现您的理想情况:解压缩安装,删除卸载。