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.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
技巧,它只允许从测试文件夹访问主源文件夹。
【讨论】:
【参考方案2】:main
和 sub2
都不是包,因为它们都不包含 __init__.py
。请参阅the relevant Python docs 了解更多信息。
【讨论】:
那么如何从这个文件中导入一个类呢? @Jamshy 尝试添加__init__.py
文件。它们可以是空的。以上是关于Python 3模块从另一个文件夹导入错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将Python导入函数从另一个目录导入文件,然后从另一个目录导入另一个函数
使用 Python 3 从另一个目录中的模块导入本地函数,并在 Jupyter Notebook 中进行相对导入