Этот вопрос показывает простой проект:
./__init__.py
./foo.py
./tests
./__init__.py
./test_foo.py
В моем случае, foo.py - это исполняемый файл, который также содержит некоторые функции, импортированные другим кодом (скажем, bar.py
в верхний уровень).
Проблема в том, что nose не будет импортировать пакеты из каталога верхнего уровня с __init__.py
.
Этот ответ говорит либо 1) удалить верхний уровень __init__.py
, либо 2) изменить весь импорт (в том числе в foo.py, если он импортирует из каталога верхнего уровня).
Я не хочу сделать 1, потому что в моем foo.py есть функции, которые нужно импортировать в другое место.
Я не хочу делать 2, потому что это ломает foo.py (он импортирует из baz.py, также в верхний уровень).
Что самое простое, что я могу сделать, чтобы foo.py был исполняемым файлом (с основным), был импортируемым и тестируемым с помощью тестов носа?
Я пробовал несколько разных флагов, например,
nosetests --exe --no-path-adjustment --no-skip
Если я должен реструктурировать свой проект, то что рекомендуется? Должен ли я положить foo.py в bin
? Это привело бы к импорту функций из bin.foo
, что выглядит странно. Должен ли я разделить функции из foo.py на bin и lib? Кажется сложным.
PS Почему тесты носа исключают каталог верхнего уровня, если это пакет? Это кажется странным, и, очевидно, у многих людей есть проблемы с ним (ответ, который я связал, в настоящее время имеет 221 голос).