2024-04-25 18:01:00 发布
网友
给定这样的目录结构
/main/ /main/common/foo.py /main/A/ /main/A/src/ /main/A/src/bar.py
如何使用Python的相对导入从bar导入foo?我有一个可行的解决方案,把它添加到路径中,但这很难看。在Python 2.7中,有没有一种方法可以简单地处理单个import?
bar
foo
import
这是一个更复杂的问题:
Importing modules from parent folder
正确的相对导入是:
from ...common import foo
但是,相对导入只适用于一个包。如果main是一个包,那么您可以在这里使用相对导入。如果main不是包,则不能。
main
因此,如果您在/main/中运行脚本并执行类似import A.src.bar的操作,则该相对导入将失败,并显示“试图在顶层包之外进行相对导入”。这是因为相对导入试图导入顶级包A之外的内容。
/main/
import A.src.bar
A
但是,如果在/中运行脚本并执行类似于import main.A.src.bar的操作,则相对导入将成功,因为main现在是一个包。在这种情况下,以下两项是等效的:
/
import main.A.src.bar
from ...common import foo from main.common import foo
要回答您的评论:.的含义不会根据脚本的运行位置而改变,而是根据包结构的不同而改变。
.
正确的相对导入是:
但是,相对导入只适用于一个包。如果
main
是一个包,那么您可以在这里使用相对导入。如果main
不是包,则不能。因此,如果您在
/main/
中运行脚本并执行类似import A.src.bar
的操作,则该相对导入将失败,并显示“试图在顶层包之外进行相对导入”。这是因为相对导入试图导入顶级包A
之外的内容。但是,如果在
/
中运行脚本并执行类似于import main.A.src.bar
的操作,则相对导入将成功,因为main
现在是一个包。在这种情况下,以下两项是等效的:要回答您的评论:
.
的含义不会根据脚本的运行位置而改变,而是根据包结构的不同而改变。相关问题 更多 >
编程相关推荐