Django:如何在目录中对应用程序进行分组?

Django:如何在目录中对应用程序进行分组?,django,Django,在我的项目中,我使用的修改源来自少数第三方应用程序。我想将这些第三方应用程序放在一个单独的目录中,这样它们就不会与我自己的应用程序位于同一目录级别。在django这可能吗 我试着简单地将应用程序放在目录thirdparty中,并将我的安装的应用程序更改为这样: INSTALLED_APPS = ( 'my_app', ... 'thirdparty.django_messages', 这当然与以下方面有关: ImportError: No module named th

在我的项目中,我使用的修改源来自少数第三方应用程序。我想将这些第三方应用程序放在一个单独的目录中,这样它们就不会与我自己的应用程序位于同一目录级别。在django这可能吗

我试着简单地将应用程序放在目录
thirdparty
中,并将我的
安装的应用程序更改为这样:

INSTALLED_APPS = (
    'my_app',
    ...
    'thirdparty.django_messages',
这当然与以下方面有关:

ImportError: No module named thirdparty
之后,我自然地将
\uuuu init\uuuu.py
添加到目录中。但它再次失败:

ImportError: No module named django_messages.apps
为了避免混淆,app
django_消息确实包含
apps.py

有没有办法将django应用程序分组到一个目录中,或者它们都必须在同一个项目根目录中

编辑 一个更好的选择是在被接受的答案中


对于那些坚持分组的应用程序,请参见接受答案

不要这样做。如果您真的需要修改第三方应用程序的源代码,请将存储库分叉,以便您能够查看和合并上游更新

然后使用
pip
安装修改后的应用程序

例如,如果您在github上分叉了
django autocomplete light
(假设):

您将能够像任何其他pip包一样升级它:

pip install --upgrade git+ssh://git@github.com/dsalaj/django-autocomplete-light.git
甚至可以将其添加到您的
requirements.txt


同样,您可以使用pip的
--editable
-e
)选项将这些软件包安装到项目中的特定文件夹中。从
pip帮助

-e、 --可编辑从本地项目路径或VCS url以可编辑模式(即setuptools“开发模式”)安装项目


不过,我想回答这个问题。问题在于app
django_messages
认为它是一个顶级模块(应该是这样的)。因此,它可以使用绝对python路径(从
django\u消息开始)导入其子模块。但是,当您将其放置在模块
thirdparty
中时,
django_消息
将成为
thirdparty
的子模块。您可以将
thirdparty
目录添加到
PYTHON_路径中
,以便
django_消息
作为顶级模块提供。但这样做实在是不可取的
lib/pythonX.Y/site packages
是安装第三方软件包的最佳位置,pip就是在这里安装这些软件包的


如果你不知道它们是什么,你可能也会对它们感兴趣。

不要这样做。如果你真的需要修改第三方应用程序的源代码,请转移存储库,这样你就可以观看和合并上游更新

然后使用
pip
安装修改后的应用程序

例如,如果您在github上分叉了
django autocomplete light
(假设):

您将能够像任何其他pip包一样升级它:

pip install --upgrade git+ssh://git@github.com/dsalaj/django-autocomplete-light.git
甚至可以将其添加到您的
requirements.txt


同样,您可以使用pip的
--editable
-e
)选项将这些软件包安装到项目中的特定文件夹中。从
pip帮助

-e、 --可编辑从本地项目路径或VCS url以可编辑模式(即setuptools“开发模式”)安装项目


不过,我想回答这个问题。问题在于app
django_messages
认为它是一个顶级模块(应该是这样的)。因此,它可以使用绝对python路径(从
django\u消息开始)导入其子模块。但是,当您将其放置在模块
thirdparty
中时,
django_消息
将成为
thirdparty
的子模块。您可以将
thirdparty
目录添加到
PYTHON_路径中
,以便
django_消息
作为顶级模块提供。但这样做实在是不可取的
lib/pythonX.Y/site packages
是安装第三方软件包的最佳位置,pip就是在这里安装这些软件包的



如果你不知道它们是什么,你也可能会对它们感兴趣。

不清楚你想要实现什么@说什么不清楚?在标题和最后一句话中,我问的正是我想要实现的目标。我将试图让问题更清楚。不清楚的是你为什么要这样做,你想通过这样做来解决什么问题?@Sayse正在组织一个包含大量应用程序的项目。想检查一下这是否可行。但这样做并没有实现任何效果,如果你真的想,在第三方应用程序上方添加一行注释,不清楚你想要实现什么@说什么不清楚?在标题和最后一句话中,我问的正是我想要实现的目标。我将试图让问题更清楚。不清楚的是你为什么要这样做,你想通过这样做来解决什么问题?@Sayse正在组织一个包含大量应用程序的项目。我想检查一下这是否可行。但是你这样做并没有取得任何效果,如果你真的想,在第三方应用程序上方添加一行注释谢谢你的建议,这是一个不错的选择。但是你能回答我是否有可能达到我想要达到的目标吗?你真的不想达到你想要达到的目标。我非常感谢你详细解释为什么这是一个如此糟糕的想法。无论如何,这可能是我所期待的答案。非常感谢。同意安托万所说的一切。但是,实际上有一些方法可以将定制库与常规pip包分开。您可以使用pip“可编辑”安装
pip安装-e git+ssh://github.com/whatever
。这将把包安装到当前目录中的./src目录中,并将更新python站点包中的.pth文件以包含它。另一种方法是创建一个自定义的.pth文件,并手动将其放置在站点包中。这两种方法都有各自的优点和缺点,太长了,无法在评论中列出。谢谢