【发布时间】:2021-03-21 12:41:12
【问题描述】:
这里似乎已经有很多关于 python 3 中的相对导入的问题,但是在经历了许多问题之后,我仍然没有找到我的问题的答案。 所以这就是问题所在。
我有一个如下所示的包裹
package/
__init__.py
A/
__init__.py
foo.py
test_A/
__init__.py
test.py
我在 test.py 中有一行:
from ..A import foo
现在,我在package的文件夹中,我运行
python -m test_A.test
我收到消息
"ValueError: attempted relative import beyond top-level package"
但如果我在package 的父文件夹中,例如,我运行:
cd ..
python -m package.test_A.test
一切都很好。
现在我的问题是:
当我在package的文件夹中,并且我以test_A.test运行test_A子包中的模块时,根据我的理解,..A只上升了一级,仍然在package文件夹内,为什么它给出消息说beyond top-level package。导致此错误消息的具体原因是什么?
【问题讨论】:
-
我这里有个想法,所以当 test_A.test 作为模块运行时,'..' 超出了 test_A,这已经是导入 test_A.test 的最高级别了,我认为包级别是不是目录级别,而是您导入包的级别。
-
我保证看完这个回答stackoverflow.com/a/14132912/8682868,你会明白关于相对导入的一切。
-
有没有办法避免进行相对导入?比如 Eclipse 中的 PyDev 如何查看
/src? 中的所有包 -
您的工作目录是否也有一个 init.py?