pytest рекомендует включить дополнительный каталог для разделения исходного кода внутри проекта:
my_package
├── src # <-- no __init__.py on this layer
│ └── my_package
│ ├── __init__.py
│ └── util_module
│ ├── __init__.py
│ └── utils.py
└── tests
├── __init__.py
└── test_util_module
├── __init__.py
└── test_utils.py
К сожалению, они ничего не говорят[1] о том, как должен работать импорт в тестовом коде в таком случае, который отлично работает для моей IDE в этот наивный пример[2], но вызывает следующую ошибку с pytest:
my_package $ pytest
====================== test session starts ======================
platform linux -- Python 3.6.4, pytest-3.5.1, py-1.5.3, pluggy-0.6.0
rootdir: /home/user/workspace/my_package, inifile:
collected 0 items / 1 errors
============================ ERRORS =============================
___ ERROR collecting tests/test_util_module/test_utils.py ___
ImportError while importing test module '/home/user/workspace/my_package/tests/test_util_module/test_utils.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_util_module/test_utils.py:1: in <module>
from test.test_module.some_file import starify
E ModuleNotFoundError: No module named 'my_package.util_module'
!!!! Interrupted: 1 errors during collection !!!!!
Я могу решить эту проблему, изменив импорт теста на from src.my_package.util_module.utils import starify
, но затем моя IDE жалуется на то, что часть src
избыточна, поэтому я бы хотел ее исключить.
[1]: Это уже не так. Начиная с версии 3.7.3, pytest рекомендует редактируемую установку, также представленную в ответе @hoefling в верхней части его рекомендации.
[2]: установка virtualenv env -p python3.6; source env/bin/activate; pip install pytest
__init__.py
)? - person Tom Dalton   schedule 03.05.2018tree .
- person Arne   schedule 03.05.2018PYTHONPATH=".:src/"
перед запуском тестов, это что-то изменит? - person Tom Dalton   schedule 03.05.2018test $ pytest
должно бытьmy_package $ pytest
? - person Tom Dalton   schedule 03.05.2018PYTHONPATH
решает проблему, и это, безусловно, лучше, чем добавлениеsrc.
перед импортом всех наборов тестов, но я надеюсь на более чистое решение, которое сделает репозиторий доступным для тестирования, как сейчас. - person Arne   schedule 03.05.2018my_package
, т.е. содержит ли онsetup.py
? - person Nils Werner   schedule 03.05.2018import
активным, установив его - person Nils Werner   schedule 03.05.2018