我有以下项目文件(使用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
和测试正常工作。构建项目并正确导入文件的正确方法是什么?
答案 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