pytest 导入错误 - 找不到模块

问题描述 投票:0回答:1

我有这个目录结构:

app/
    pyproject.toml
    src/
        app/
            __init__.py
            app.py
            functions1.py
            functions2.py
    tests/
        test_functions1.py
        test_functions2.py
 

如果我从应用程序目录(

app>python path/to/app/src/app/app.py -flags
)在命令行上运行它,它就可以工作。 但是,当我使用 pytest (
app>pytest path/to/app/tests/test_functions1.py
) 运行测试时,在收集过程中出现以下错误(适应于这个虚拟示例):

ImportError while importing test module 'path/to/app/tests/test_functions1.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests\test_functions1.py:9: in <module>
    from app.functions1 import MyClass
src\app\functions1.py:13: in <module>
    from functions2 import other_function
E   ModuleNotFoundError: No module named 'functions2'

根据 pytest 文档,我的 TOML 中有以下内容:

[tool.pytest.ini_options]
pythonpath = "src"
addopts = [
    "--import-mode=importlib",
]

有人可以告诉我在这种情况下导入函数的正确方法吗?

编辑: 感谢您的链接建议。 我做了一些更改并更新了这个答案,但我相信我的问题可能特定于 pytest (该链接是更一般的讨论)。

我认为问题是我的导入命名空间在使用 pytest 运行时不正确,但我不确定如何正确引用它们而不破坏测试之外的应用程序。 如果我这样做:

functions1.py

from app.functions2 import other_function

而不是:

functions1.py

import functions2 import other_function

然后我的测试有效,但

app>python path/to/app/src/app/app.py -flags
失败并出现
ModuleNotFoundError: No module named 'app'
。 请注意,
other_function
functions2.py
中的函数使用,但不是由我正在测试的
functions2.py
中的特定函数使用。

python import module package pytest
1个回答
0
投票

如果其他人遇到这些问题,问题是我没有在可编辑模式下安装我正在本地处理的包(即导航到包,然后执行

pip install -e .
)。 完成后,我的测试将在测试和主
app.module
文件中以
.py
的形式导入。这是在文档中提到的,所以我没有任何借口!

干杯, 蒂姆

© www.soinside.com 2019 - 2024. All rights reserved.