我有一个项目的结构如下:
project/
main.py
package1/
module1.py
module2.py
subpackage1/
module4.py
package2/
module3.py
# main.py
from package1 import module1
# module1.py
from . import module2
from .subpackage1 import module4
# module4.py
from .. import module2
如果我从顶级目录运行
python main.py
,到目前为止一切都很好。但是,如果我将以下行添加到 module1.py
# module1.py
from . import module2
from .subpackage1 import module4
from ..package2 import module3 # add this line
我收到错误
ValueError: attempted relative import beyond top-level package
。应该如何相对导入顶级目录的另一个目录中的模块?还是说不可能?
另一个奇怪的发现是以下工作
from . import module2
from .subpackage1 import module4 # this line does NOT work without the '.' relative import
from package2 import module3 # removing relative import works ```
Python 不允许您跳转到不同的顶级包,这就是您收到错误的原因。您应该考虑使用绝对导入。
from . import module2
from .subpackage1 import module4
from package import module3
如果项目文件位于您的 python 路径中,这应该可以工作。 希望这有帮助