【发布时间】:2015-08-04 03:12:27
【问题描述】:
我终于从 python2 跳到了 python3(万岁)。但是,我现在被导入错误所困扰,我似乎无法理智地解决这些错误。
我有这样的标准 Django 1.8 布局:
foo_bar
| - foo_bar
| - settings.py
| - urls.py
| - app_one
| - app_two
| - manage.py
当我尝试从另一个应用程序导入某些内容时,我的问题就出现了。例如,将模型从 app_one.models.py 导入到 app_two.views.py。
我收到的服务器错误取决于我的操作。
1.绝对导入
# in app_two.views.py
from foo_bar.app_one.models import MyModel
这给出了错误:
No module named foo_bar.app_one
如果我将项目切换回 2.7,则此导入当然可以正常工作。更不用说,PyCharm 能够解析这条路径并自动完成。所以..这很混乱。
2。相对导入:
# in app_two.views.py
from ..app_one.models import MyModel
这给出了错误:
attempted relative import beyond top-level package
再一次,同样的事情,它似乎应该可以工作——甚至 PyCharm 也认为它应该可以工作(并且可以再次从路径自动完成)。但是,每当我运行我的服务器时,它会在加载此视图时爆炸。
解决方式:
现在,我可以让导入工作,但以一种似乎零意义的方式。如果我离开顶层包并放弃相对导入符号,它将导入而不会出错。
# in app_two.views.py
from app_one.models import MyModel
但这对我来说比其他任何事情都更没有意义!为什么这行得通???当然,当我换回 2.x 时,这个会中断。此外,PyCharm(就其价值而言)将其显示为无法解析的导入。
【问题讨论】:
-
使用这种格式:
import app_one用于导入app_one.models.MyModel用于使用。 -
我不了解 django,但是当您遇到错误时,
manage.py是否运行? -
尝试从 app_one.models 导入 MyModel
标签: python django python-3.x