python - 如何从 Django 中的项目级包导入而不与同名的应用级模块冲突?
问题描述
我有一个具有以下结构的 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
文件中,我有一堂课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 试图在filters.MyFilter
里面polls/utils.py
找到它,但它没有找到它,所以它抛出了错误。我只是想想办法绕过这个冲突并强制python在项目根目录中filters.MyFilter
的包内查找。utils/
解决方案
在 Python 2 中,import utils
是模棱两可的,因为它可以是相对或绝对导入。
如果您通过将以下导入添加到模块顶部来启用 Python 3 行为,
from __future__ import absolute_import
然后from utils.filters import MyFilter
将被视为绝对导入并且将起作用。
一旦你添加了未来的导入,import .utils
如果你想polls/utils.py
从polls/admin.py
.
推荐阅读
- schema.org - Schema dot org 和替代语言
- javascript - 如何将对象的属性值传递给函数
- google-api - GSuite OAuth 2.0 无效范围 Grafana
- javascript - 将字符串与嵌套对象进行比较
- mysql - 用MYSQL在两列之间选择最小值
- gradle - 为什么我的语法突出显示在 intellij 的 build.gradle 文件中不起作用
- node.js - 在 Node.js 中的 wdio.config.js 中创建新的配置参数
- typescript - Vue 打字稿插件
- c++ - 为什么将三元运算符与 std::cout 一起使用时,会打印 conidtion 而不是结果?
- templates - Helm Override 通用模板值