Может произойти сбой из-за способа работы import
.
Я бы рекомендовал всегда использовать абсолютный импорт.Это означает, что при создании пакета весь импорт в этом пакете импортируется полностью с верхнего уровня вниз: from package.module import thing
.И что еще более важно, установка вашего пакета - не как обычного пакета Python, а с символической ссылкой позволяет редактировать исходный код, пока он все еще считается установленным пакетом.Таким образом, вы можете расположить свои тесты и сценарии так, как вы хотите, и все будет работать всегда.
Установка вашего пакета выполняется с помощью pip install -e .
из root
.См. учебник по упаковке для примера упаковки, если вы с ней не знакомы.
Пример структуры пакета может быть:
root/
setup.py
MANIFEST.in
...
package/
__init__.py
app.py
tests.py
module/
__init__.py
component.py
module_test.py
# Or have a tests folder under root
tests/
test_module.py
tests.py
И, например, вapp.py
, и везде на самом деле:
from package.module.component import Class
from package.module import thing # that was declared in module/__init__.py
Так что для вашего случая, если я правильно понял, вы бы получили:
root/
setup.py
MANIFEST.in
...
src/
__init__.py
app.py
module.py
tests/
test_module.py
tests.py