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

Python 3 module import error from another folder

本问题已经有最佳答案,请猛点这里访问。

文件夹结构:

1
2
3
4
5
  main
   |__ sub1
      |__ __init__.py
   |__ sub2
      |__ test.py

我需要在test.py内进口:

1
from .. sub1 import SomeClass

它显示此错误:

ValueError: attempted relative import beyond top-level package.

感谢您的回复。


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

imho,最好的方法是从主目录开始测试。由于当前目录总是在sys.path中,sub1将直接导入,这就足够了:

1
from sub1 import SomeClass

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

以下是test.py的开始:

1
2
3
4
5
6
7
import os.path
import sys

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

from sub1 import SomeClass
...

就这样:一个只允许从测试文件夹访问主源文件夹的sys.path技巧。


mainsub2都不是一个包,因为它们都不包含__init__.py。有关详细信息,请参阅相关的python文档。