gpt4 book ai didi

python - 创建包时,如何管理弱依赖项的迁移?

转载 作者:行者123 更新时间:2023-12-04 07:43:04 26 4
gpt4 key购买 nike

我有一个 Django 应用程序,我想通过 Pipy 打包并提供给社区。它唯一强烈的依赖是Django。它还与 Django CMS 很好地集成,并为 Django CMS 提供了额外的集成。我计划仅向安装了 Django CMS 的项目提供此附加功能。 (这就是我所说的弱依赖——没有它也能安装和工作,但使用它甚至会很痛苦。)具体来说,某些模型仅在基本模型 CMSPlugin 时才定义。来自 Django CMS 已安装。
但是,有没有一种好的/正确的方法来管理迁移?
我不能包括依赖于 CMSPlugin 的模型迁移在包中,因为没有 Django CMS 安装的用户将无法运行它。
如果我根据 CMSPlugin 省略迁移使用 Django CMS 的用户将在第一次安装时创建它们。然而,我担心每次更新软件包时,这些迁移都会在 pip install upgrade 上丢失。当包被覆盖时。

最佳答案

由于这些模型不一定在您的包中使用,因此最好将它们放在另一个 Django 应用程序中,该应用程序可以是您应用程序的子应用程序,也可能只是您包中的一个应用程序。如果用户已安装 CMSPlugin那么他们现在可以简单地将您这个额外的应用程序添加到 INSTALLED_APPS列表来使用它,这也带来了好处,您的用户现在可以选择使用或不使用它。
通过这种方式,无论是否安装了此应用程序,您还可以使用应用程序注册表轻松调整 View is_installed method [Django docs] :

from django.apps import apps


def some_view(request):
if apps.is_installed('yourpackage.path.to.weak_dependency_subapp'):
# Weak dependency is present
else:
# Weak dependency is absent
备注 :你必须小心,如果你没有安装这个应用程序模型,你就不要导入它,否则它可能会给你一些错误,因为它不会被加载。
编辑 :要制作子应用程序,您可以通过 cd 进入应用程序目录和 python ../manage.py startapp subappname或直接 python manage.py startapp subappname <your_app>/subappname (需要先制作目录subappname)然后设置它的app config的 name归因于 <your_app>.subappname .

关于python - 创建包时,如何管理弱依赖项的迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67354024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com