我在我的项目中使用来自少数第三方应用程序的修改源.我想将这些第三方应用程序放在一个单独的目录中,以便它们与我自己的应用程序不在同一目录级别.这可能在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接受的答案
对于持久分组应用程序的人,请参阅此处接受的答案!
不要这样做.如果您确实需要修改第三方应用程序的源代码,请分叉存储库,以便您能够观察和合并上游更新.
然后安装修改后的应用程序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感兴趣.
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |