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

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

我有一个这样的文件夹:

draft
    model
        a.py
    package
        b.py

我想通过这段代码将a.py中的函数导入到b.py中

from ..model import a

但我遇到了这样的错误:
ImportError: attempted relative import with no known parent package

我尝试这个问题的第一个答案

python -m package.b

但又出现了一个错误:
ImportError: attempted relative import beyond top-level package

我尝试将

__init__.py
添加到模型和包以及草稿文件夹中。
但同样的错误还是发生了。

我知道有一个解决方案,例如:

import sys
sys.path.append(f'{source_path}/draft/model')

但是当我将此代码移动到另一台计算机时,必须更改 source_path。当我忘记时可能会出现错误。

有人可以帮助我吗?

python importerror relative-import
1个回答
0
投票

当你运行“python -m package.b”时,工作目录是“/draft”,其中“model”和“package”是两个独立的ROOT包。请注意,这两个包不共享公共父包,因此

from ..
不起作用。

如果您坚持使用相对导入,请将文件作为根包放置在公共父文件夹中。例如,将目录结构重新排列为:

draft
    project
        model
            a.py
        package
            b.py

并使用命令运行:

python -m project.package.b
© www.soinside.com 2019 - 2024. All rights reserved.