Python3 - Pytest目录结构和导入

时间:2017-06-25 02:15:41

标签: python python-3.x testing pytest

我有以下项目文件(使用Python3):

pyproj
├── __init__.py
├── main.py
├── module1.py
├── module2.py
└── tests
    ├── __init__.py
    └── test_module.py

module1不包含任何导入。

module2从模块1导入如下:

import module1

main.py从module1和module2导入如下:

from module1 import *
from module2 import *

我希望tests / test_module能够从module2和module1导入,并且能够使用pytest目录中的pyproj运行它。但是尝试使用以下方法导入module2:

 from ..module2 import *
pytest目录或pyproj目录运行tests时,

会导致以下错误:

tests/test_module.py:1: in <module> from ..module2 import * module2.py:1: in <module> import module1 E ImportError: No module named 'module1'

问题似乎是在module1导入module2时。 python3 main.py然后正确运行。

我尝试了很多更改,但似乎没有一个允许main.py和测试正常工作。构建项目并正确导入文件的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

在测试中使用绝对导入:from module2 import *并在运行测试之前将PYTHONPATH配置为pyproj。或者在安装了pyproj的虚拟环境中运行测试。或者使用tox为你创造这样的venv。

答案 1 :(得分:0)

我的解决方案可能不是最佳做法,但经过一些实验后仍有效:

  • 使用myproj.module2导入一些东西

  • 让PYTHONPATH包括myproj

  • 在测试目录中使用 init .py

我的实验代表在这里:https://github.com/epogrebnyak/question-package-structure-for-testing/tree/master/which