Покрытие Python не находит мои собственные модули - PullRequest
1 голос
/ 09 мая 2019

Мой код выполняется правильно с использованием python3, но при использовании cover3 возвращается ImportError при импорте созданного мной пакета.

Мой проект выглядит следующим образом:

components/common/ConfigTest/ConfigTest.py -> файл, который я хочуexecute - тест для класса Config, объявленного в файле Config.py

components/common/Config.py ->, включенного в ConfigTest.py

Переменная среды PYTHONPATH указывает на местоположение каталога componentsпоэтому я могу использовать его как базовый каталог для своих импортов.

Файл ConfigTest.py начинается следующим образом:

import os
import unittest

from common.Config import Config

При расположении в каталоге ConfigTest при выполнении следующей команды выдается ожидаемаявывод:

python3 -m unittest ConfigTest.py

Однако при выполнении coverage3 run ConfigTest.py или coverage3 run -m unittest ConfigTest.py выдается следующая ошибка:

Traceback (most recent call last):
File "ConfigTest.py", line 7, in <module>
from common.Config import Config
ImportError: No module named 'common.Config'

В прошлом у меня возникали похожие проблемы при выполнении кода на разных машинах/ разные версии Python, и эти проблемы были вызваны из-за неправильной настройки среды PYTHONPATH var.В этом случае я напечатал print(os.environ['PYTHONPATH']) перед выполнением проблемного импорта, и он печатает правильное значение такой переменной при использовании python3 и cover3.

Любая подсказка, в чем может быть проблема?Спасибо.

1 Ответ

0 голосов
/ 14 мая 2019

Я решил это, добавив __init__.py как в исходные, так и в тестовые каталоги.Похоже, что python3 может найти источники, используя PYTHONPATH, даже если в каталоге нет файла __init__.py, но для покрытия3 требуется, чтобы каталоги были заданы как модули.

Это работает в моей текущей конфигурации, но яЯ не уверен, что это общий Python и поведение покрытия.

...