【问题标题】:Python 3 module import error from another folder [duplicate]Python 3模块从另一个文件夹导入错误[重复]
【发布时间】:2019-05-20 22:58:10
【问题描述】:

文件夹结构:

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

我需要在test.py里面导入:

from .. sub1 import SomeClass

它显示了这个错误:

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

感谢您的回复。

【问题讨论】:

  • 您从哪个目录运行test.py

标签: python python-3.x


【解决方案1】:

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

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

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 技巧,它只允许从测试文件夹访问主源文件夹。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 那么如何从这个文件中导入一个类呢?
    • @Jamshy 尝试添加__init__.py 文件。它们可以是空的。
    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2013-08-26
    • 2019-08-16
    相关资源
    最近更新 更多