gpt4 book ai didi

python - 导入错误 : cannot import name when using pytest

转载 作者:行者123 更新时间:2023-12-04 16:46:24 25 4
gpt4 key购买 nike

我在 python 中创建了一个与此类似的目录结构:

module_root
├── __init__.py
├── module_a
│   ├── __init__.py
│   ├── local_module_a.py
│   └── tests
│   ├── context.py
│   └── test_local_module_a.py
├── module_b
│   └── tests
│   └── context.py
├── tests
│   ├── context.py
│   └── test_this_module_will_be_exported.py
├── this_module_will_be_exported.py
└── this_module_will_not_be_exported.py

每个模块都有自己的测试文件夹和测试。一旦 Python 不在文件上方的目录中搜索模块,调用 import , 每个测试目录都有一个名为 context.py 的文件这类似于:
import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from this_module_will_be_exported import ThisClassWillBeExported

然后,在每个测试文件中,我使用以下导入语句:
from context import ThisClassWillBeExported

当我只有一个时一切正常 test一个目录 context.py ,但随着我添加更多测试(如上面目录树中所述), pytest执行返回以下错误。
ImportError while importing test module 'path/to/module_root/tests/test_this_module_will_be_exported.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
module_root/tests/test_this_module_will_be_exported.py:1: in <module>
from context import ThisClassWillBeExported
E ImportError: cannot import name 'ThisClassWillBeExported'

当我更改 module_root/module_a/tests/context.py 的名称时至 module_root/module_a/tests/_context.py (例如),测试运行良好。所以我知道我可以简单地改变所有 context.py不同的名字,但我想保留他们的名字以避免更多的工作。

所以我需要社区的帮助,有办法保持 context.py命名并解决这个问题?

谢谢。 :)

最佳答案

首先,您只需要将根目录添加到PYTHONPATH不是所有的上下文文件。

其次,如果要从同一文件夹导入上下文文件,请尝试使用相对路径。

from .context import ThisClassWillBeExported

第三,确保所有上下文文件都有您要导入的变量。

关于python - 导入错误 : cannot import name when using pytest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46154900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com