Структура моего проекта кажется правильной.
setup.py
mypackage/
__init__.py
__main__.py
main.py
script1.py #import script2
script2.py
tests/
test_script2.py
Файл script1.py
импортирует script2.py
, используя 'import script2'
.
Я могу запустить код без ошибок с помощью следующих команд:
python mypackage
python mypackage/main.py
К сожалению, когда я пытаюсь выполнить тесты, используя pytest
или python -m pytest
, я получаю сообщение об ошибке, что нет модуля с именем script2
(полное сообщение ниже). Я установил свой пакет в редактируемом режиме pip install -e .
Я могу это исправить, используя импорт с именем пакета, например import mypackage.script2 as script2
, но каждый, кто клонирует мой репозиторий, должен будет установить пакет с pip перед его запуском. В противном случае возникнет ошибка, что mypackage
не найден.
Я бы хотел иметь возможность запускать этот код без установки pip и иметь возможность запускать каждый файл сценария отдельно.
Не могли бы вы предложить мне альтернативное решение?
Репозиторий: pytest-import-demo
Сообщение об ошибке от pytest:
(venv) lecho:~/pytest-imports-demo$ pytest
================================================= test session starts ==================================================
platform linux -- Python 3.6.7, pytest-4.4.1, py-1.8.0, pluggy-0.9.0
rootdir: /home/lecho/pytest-imports-demo
collected 0 items / 1 errors
======================================================== ERRORS ========================================================
________________________________________ ERROR collecting tests/test_script2.py ________________________________________
ImportError while importing test module '/home/lecho/pytest-imports-demo/tests/test_script2.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_script2.py:2: in <module>
import mypackage.script1 as script1
mypackage/script1.py:1: in <module>
import script2
E ModuleNotFoundError: No module named 'script2'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
=============================================== 1 error in 0.05 seconds ================================================