创建具有 3rd 方依赖项的可安装 Django 应用程序

Posted

技术标签:

【中文标题】创建具有 3rd 方依赖项的可安装 Django 应用程序【英文标题】:Creating an installable Django app with a 3rd party dependency 【发布时间】:2019-12-16 04:34:51 【问题描述】:

我正在pypi 上创建一个可安装的Django 应用程序,该应用程序可以添加到INSTALLED_APPS。到目前为止,该应用程序可以正常运行。

现在的问题是我希望在我的应用程序中使用Django Rest Framework。这是否意味着用户在安装我的应用时必须将我的应用以及Django Rest Framework 添加到他们的INSTALLED_APPS

有没有一种方法可以简单地将我的应用程序添加到INSTALLED_APPS,而用户不会意识到或需要担心其他任何事情。他们不需要知道我在后台使用Django Rest Framework

我已经将djangorestframework 添加到我的setup.py 以便在用户pip installs 我的包时安装它。所以问题在于用户是否必须明确地将其添加到INSTALLED_APPS

【问题讨论】:

Django 的INSTALLED_APPS 列表只是为了方便,因为 Django 会在列出的应用程序中自动搜索模板、静态文件、url、模型等。如果您仅出于内部目的使用 DRF,则它不需要出现在 INSTALLED_APPS 列表中。可以将 DRF 视为一个常规的 Python 库,但是您可以导入和使用它。 【参考方案1】:

您可以在 setup.py 中将 djangorestframework 添加到您的 install_requires

然后,当你的用户运行pip install yourapp时,它也会安装rest框架。

就个人而言,我会建议在您的设置说明中将'yourapp''rest_framework' 添加到INSTALLED_APPS。您也许能够找到一种自动添加它的方法,但这可能不值得付出努力。以 Django Debug Toolbar removed its automatic setup code 为例来降低复杂度。

【讨论】:

【参考方案2】:

您可以/(应该)做的最好的事情是在您的应用程序中添加 REST 框架作为依赖项,并指示用户在已安装的应用程序中添加 REST 框架。因为项目设置不应实际修改,应显式硬编码并在代码库中保持只读。

您应该指导用户在已安装的应用程序中添加rest框架,例如this package does

您可以做的另一件事是检查用户是否在您的 AppConfig 类的 ready 挂钩中安装了“rest_framework”,如下所示

class YourAppConfig(AppConfig):
    name = 'yourapp'

    def ready(self):
        from django.conf import settings
        if 'rest_framework' not in settings.INSTALLED_APPS:
            raise ImproperlyConfigured('rest_framework must be in installed apps.')

这至少会迫使他们这样做。

【讨论】:

以上是关于创建具有 3rd 方依赖项的可安装 Django 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 OSGi 包中添加第三方 Maven 依赖项的最佳方法

如何使用 Gradle 创建具有实现依赖项的可执行胖 jar

如何为 3rd 方渲染提供空 QML 项的 OpenGL 上下文?

如何在操场上安装 3rd 方依赖项(如 Alamofire)

在android中创建一个具有依赖项的库

OSGI - 处理 3rd 方 JAR 及其依赖项