【问题标题】:python pytest importing modules which import local modules导入本地模块的python pytest导入模块
【发布时间】:2023-04-05 20:34:01
【问题描述】:

我有以下python3项目结构:

tests/
    - testsuite_service1/
        - test_main.py
    - testsuite_service2/
        - test_main.py
src/
    - service1/
       - codebase/
           - __init__.py
           - main.py
           - logger.py
           - waiter.py
    - service2/
       - codebase/
           - __init__.py
           - main.py
           - logger.py
           - waiter.py

在我的测试(pytest)中,我是这样导入的:

from src.service1.codebase.waiter import check_status

为了在 service1 模块中导入特定功能。

waiter.py in service1 我正在从logger.py 导入一个函数,就像这样

from logger import configure_logger

但是,在运行测试时,我得到了错误:

Traceback:
tests/test_main/test_main.py:3: in <module>
    from src.service1.codebase.waiter import check_status
src/codebase/waiter.py:8: in <module>
    from logger import configure_logger
E   ModuleNotFoundError: No module named 'logger'.

这发生在测试运行时,感觉waiter.py不是在其本地目录中查找logger.py 而是可能在其他位置?

改成

from .logger import configure_logger

确实解决了这个问题,但会导致运行时出现问题,我计划将其部署到 (service1 的单个 zip,没有父目录),因此会出现错误 Unable to import module 'main': attempted relative import with no known parent package

是否可以不使用相对导入并让我的测试了解在哪里可以找到所需的文件?

【问题讨论】:

  • 你试过from src.service1.codebase.logger import configure_logger吗?
  • 您还好像在包的根目录中缺少__init__.py 文件?

标签:
python
pytest