ImportError:尝试相对导入超出顶级包?

问题描述 投票:0回答:4

我的代码结构:

code structure 1

code structure 2

当我将模型从帐户应用程序导入到 to_do 应用程序时:

#in to_do/models.py
from ..accounts.models import Account

我有这个错误:

 File "/home/ghost/projects/django_projects/To_Do_App/to_do_list/to_do/models.py", line 2, in <module>
    from ..accounts.models import Account
ImportError: attempted relative import beyond top-level package

如何解决?

python django python-import importerror relative-import
4个回答
2
投票

我尝试以这种方式导入我的模型

from accounts.models import Account

现在它可以工作了,但是 pycharm 说这不是正确的


1
投票

确保父目录中有一个

__init__.py
文件。这就是 python 将其识别为包的方式。


0
投票

除了添加

__init__.py
文件之外,当您从包含所有顶级包的顶级目录运行代码时,您必须使用
-m
开关才能使相对导入正常工作 - 例如

$ cd to_do_list/..
$ python -m to_do_list.manage # note no .py

但是,在这种情况下最好坚持绝对导入并运行为:

$ cd to_do_list
$ python -m manage

0
投票

让我重现您的错误:

Project_rootpath
--pkg
    __init__.py
    A.py
--pkg2
    __init__.py
    B.py
test_lib.py

在 B.py 中

print("module name: ", __name__) 
from ..pkg import A

在test_lib.py中

from pkg import A
from pkg2 import B

运行 python test_lib.py

发生错误。

from ..pkg import A
ImportError: attempted relative import beyond top-level package

..pkg
指的是Project_rootpath。

由于脚本

test_lib.py
在工作空间 Project_rootpath 下运行,因此 sys.path 包含
xxx/Project_rootpath
。在这个项目中,顶级包是
pkg
pkg2
。 Project_rootpath 不能被视为一个包。

要修改这个问题,我们可以创建一个新的包pkg0并将pkg,pkg2放入pkg0中。

© www.soinside.com 2019 - 2024. All rights reserved.