Python 3模块从另一个文件夹导入错误

时间:2018-12-20 12:04:54

标签: python python-3.x

文件夹结构:

  main
   |__ sub1
      |__ __init__.py
   |__ sub2
      |__ test.py

我需要在test.py内导入:

from .. sub1 import SomeClass

它显示此错误:

  

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

感谢您的回复。

2 个答案:

答案 0 :(得分:0)

mainsub2都不是包,因为它们都不包含__init__.py。有关更多信息,请参见the relevant Python docs

答案 1 :(得分:0)

这是一个特殊的用例,用于从主源文件夹外部进行测试。 main没有理由成为一个软件包,是否有可能不成为一个软件包。

恕我直言,最好的方法是从主目录开始测试。由于当前目录始终位于sys.path中,因此sub1将是可直接导入的,这就足够了:

from sub1 import SomeClass

但是根据您的开发环境,您可能需要直接从测试目录或除main以外的任何目录中启动测试。在那种情况下,我不确定这是否是最佳实践,并且仅将其用于测试,但是一个简单的技巧是将测试文件夹的父文件夹添加到sys.path

以下是test.py的开头:

import os.path
import sys

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

from sub1 import SomeClass
...

了解它的含义:一个sys.path技巧,仅允许从测试文件夹访问主源文件夹。

相关问题