Django:如何在目录中组合应用程序?

dsa*_*laj 1 django

我在我的项目中使用来自少数第三方应用程序的修改源.我想将这些第三方应用程序放在一个单独的目录中,以便它们与我自己的应用程序不在同一目录级别.这可能在django?

我试过简单地将应用程序放在一个目录中thirdparty并改变我的INSTALLED_APPS喜好:

INSTALLED_APPS = (
    'my_app',
    ...
    'thirdparty.django_messages',
Run Code Online (Sandbox Code Playgroud)

这当然失败了:

ImportError: No module named thirdparty
Run Code Online (Sandbox Code Playgroud)

之后我自然添加__init__.py到目录中.但它又失败了:

ImportError: No module named django_messages.apps
Run Code Online (Sandbox Code Playgroud)

为了避免任何混淆,该应用django_messages确实包含apps.py

有没有办法在目录中对django应用程序进行分组,或者它们都必须位于同一项目根目录中?

编辑

另一个更好的选择是Antoine Pinsard接受的答案

对于持久分组应用程序的人,请参阅此处接受的答案!

Ant*_*ard 5

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

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

例如,如果你已经分享django-autocomplete-light了你的github(比方说https://github.com/dsalaj/django-autocomplete-light):

pip install git+ssh://git@github.com/dsalaj/django-autocomplete-light.git
Run Code Online (Sandbox Code Playgroud)

你可以像任何其他pip包一样升级它:

pip install --upgrade git+ssh://git@github.com/dsalaj/django-autocomplete-light.git
Run Code Online (Sandbox Code Playgroud)

甚至将它添加到您的requirements.txt.


正如Mad Wombat在评论中提到的,您可以使用pip --editable(-e)选项将这些包安装在项目的特定文件夹中.来自pip help:

-e,--editable从本地项目路径或VCS URL以可编辑模式(即setuptools"develop mode")安装项目.


不过,要回答这个问题.问题是该应用程序django_messages认为它是一个顶级模块(它应该是).因此,它可以使用绝对python路径(以...开头django_messages.)导入其子模块.但是,当您将其放在模块中时thirdparty,django_messages将成为子模块thirdparty.您可以将thirdparty目录添加到您的目录中,PYTHON_PATH以便django_messages作为顶级模块使用.但这样做真的不可取.lib/pythonX.Y/site-packages是您的第三方软件包的最佳位置,这是pip安装它们的地方.

如果您不知道它们是什么,您可能也对python virtualenvs感兴趣.

  • 你真的不想达到你想要的目标. (3认同)