Python coverage - указать рабочий каталог
У меня есть приложение django под названием edison с несколькими django-apps в нем. Я запускаю тесты на них, используя покрытие:
coverage run --source='.' edison/manage.py test application_one
coverage run --source='.' edison/manage.py test application_two
...
Структура моего репозитория такова:
-- edison [the repo name]
-- edison [a django application]
-- schuedled_jobs
-- internal_packages
В моих файлах тестов я импортирую материал из каталога internal_packages
, и когда я запускаю команды покрытия, я получаю ошибку
ModuleNotFoundError: No module named 'internal_packages'
.
Мой вопрос: как мне изменить рабочий каталог coverage на корневой каталог, чтобы он распознавал все модули?
Это, вероятно, решит вашу проблему. Это просто добавит каталог репозитория в системный путь, чтобы python мог найти то, что вы запрашиваете.
import sys, os
rel = os.path.join(os.getcwd(), '../')
if not rel in sys.path:
sys.path.append(rel)
from internal_packages import some_module
Это дает более чистый путь, чем относительная версия в приведенном выше примере
rel = '/'.join(os.getcwd().split('/')[0:-1])
Я полагаю, что это также можно решить, создав соответствующий __init__.py
файл для ваших модулей.