【发布时间】:2018-03-04 23:11:47
【问题描述】:
我正在用 Python 编写我的第一个项目,我发现 Python 和 PyTest 令人沮丧的是,使目录结构和导入模块工作起来很复杂。
我有一个这样的目录结构:
Football
football
__init__.py
file1.py
file2.py
file3.py
main.py
tests
context.py
test_file1.py
test_file2.py
test_file3.py
显然,文件的名称与上面的示例不同。
当我想在 file1.py 或 main.py 中从 file2.py 导入一个类 File2 时,我在 file1.py 或 main.py 中写:
from file2 import File2
我的 context.py 文件的内容是:
import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import football
这是其中一个测试文件(例如“test_file1.py”)的内容或多或少的样子:
from context import football
from football.file1 import File1
当我运行 football/main.py 时,它可以工作。
但是当我运行 pytest 时,我或多或少会遇到这样的错误:
football/file1.py:2: in <module>
from file2 import File2
E ImportError: No module named 'file2'
因此它正确导入了“file1.py”文件,但是当该文件导入“file2.py”时,它会引发无法导入的错误(尽管当我在没有测试的情况下运行 football/main.py 时,此导入有效) .
那么所有这些导入应该如何使其全部工作并且在测试期间没有错误?
【问题讨论】:
-
你的
__init__.py在哪里? -
对不起,我忘了
__init__.py。它在那里,我只是忘记在帖子中添加这个。我将编辑我的帖子。 -
在
Football(项目根目录)中添加一个空的conftest.py(不是“context.py”)。它将解析测试中的导入。
标签: python unit-testing import directory pytest