如何从 Django 中的项目级包导入而不与同名的应用程序级模块冲突?
How to import from project level package in Django without conflicting with app level module with same name?
我有一个具有以下结构的 Django 项目 (Python 2.7.15):
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
utils.py
utils/
__init__.py
filters.py
在我的 utils/filters.py
文件中有一个 class MyFilter
。然而,从 polls/admin.py
开始,当我尝试 运行 from utils.filters import MyFilter
时,我得到 ImportError: No module named filters
。如何在不重命名 polls/utils.py
模块或 utils
包的情况下将我的自定义过滤器导入投票应用程序?
注意:这不是循环导入问题。即使我不从 utils/filters.py
导入任何东西,也会发生这种情况。这是 utils/
和 polls/utils.py
之间的名称冲突。 Python 试图在 polls/utils.py
中找到 filters.MyFilter
但没有找到,因此抛出错误。我只是想想办法绕过这个冲突并强制python在项目根目录的utils/
包中寻找filters.MyFilter
。
在Python2中,import utils
是有歧义的,因为它可以是相对导入,也可以是绝对导入。
如果您通过将以下导入添加到模块顶部来启用 Python 3 行为,
from __future__ import absolute_import
然后 from utils.filters import MyFilter
将被视为绝对导入并起作用。
添加未来导入后,如果您想从 polls/admin.py
.
导入 polls/utils.py
,则需要使用显式相对导入 import .utils
我有一个具有以下结构的 Django 项目 (Python 2.7.15):
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
utils.py
utils/
__init__.py
filters.py
在我的 utils/filters.py
文件中有一个 class MyFilter
。然而,从 polls/admin.py
开始,当我尝试 运行 from utils.filters import MyFilter
时,我得到 ImportError: No module named filters
。如何在不重命名 polls/utils.py
模块或 utils
包的情况下将我的自定义过滤器导入投票应用程序?
注意:这不是循环导入问题。即使我不从 utils/filters.py
导入任何东西,也会发生这种情况。这是 utils/
和 polls/utils.py
之间的名称冲突。 Python 试图在 polls/utils.py
中找到 filters.MyFilter
但没有找到,因此抛出错误。我只是想想办法绕过这个冲突并强制python在项目根目录的utils/
包中寻找filters.MyFilter
。
在Python2中,import utils
是有歧义的,因为它可以是相对导入,也可以是绝对导入。
如果您通过将以下导入添加到模块顶部来启用 Python 3 行为,
from __future__ import absolute_import
然后 from utils.filters import MyFilter
将被视为绝对导入并起作用。
添加未来导入后,如果您想从 polls/admin.py
.
polls/utils.py
,则需要使用显式相对导入 import .utils