Python 3模块从另一个文件夹导入错误[重复]

Posted

技术标签:

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

文件夹结构:

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

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

from .. sub1 import SomeClass

它显示了这个错误:

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

感谢您的回复。

【问题讨论】:

您从哪个目录运行test.py 【参考方案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 文件。它们可以是空的。

以上是关于Python 3模块从另一个文件夹导入错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将Python导入函数从另一个目录导入文件,然后从另一个目录导入另一个函数

使用 Python 3 从另一个目录中的模块导入本地函数,并在 Jupyter Notebook 中进行相对导入

从另一个目录导入python模块

从另一个目录导入的Python失败

如何检查 Python 包中的任何模块是不是从另一个包导入?

如何将 python 函数从另一个文件导入 django 视图