Python相对导入脚本有两个级别

Python relative-import script two levels up

在过去的一小时里,我一直在为我的包裹中的进口做斗争。

我有一个像这样的目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
main_package
 |
 | __init__.py
 | folder_1
 |  | __init__.py
 |  | folder_2
 |  |  | __init__.py
 |  |  | script_a.py
 |  |  | script_b.py
 |
 | folder_3
 |  | __init__.py
 |  | script_c.py

我想访问script_b.py中的代码以及script_a.py中来自script_c.py的代码。 我怎样才能做到这一点?

如果我在script_a.py内放一个简单的import script_b,当我跑

1
from main_package.folder_1.folder_2 import script_b

我遇到了一个

1
ImportError: no module named"script_b"

为了访问script_c.py,我不知道。 我无法找到有关访问两级文件的任何信息,但我知道我可以导入一级文件

1
from .. import some_module

如何从script_a.py访问这两个文件?


要从script_a访问script_c和script_b,您将使用:

1
2
from ...folder_3 import script_c
from . import script_b

或者,如果您使用python3,您可以通过使用以下命令从script_a导入script_b:

1
import script_b

但是,您应该使用绝对导入:

1
2
from mypackage.folder_3 import script_c
from mypackage.folder1.folder2 import script_b

另见:Absolute vs Relative进口