Считайте, что у вас следующая структура проекта:
FooProject
├── foo_components
│ ├── __init__.py
│ └── foo1.py
├── utils
│ ├── __init__.py
│ └── utils1.py
├── tests
│ ├── __init__.py
│ └── foo_components
│ ├── __init__.py
│ └── test_foo1.py
│ ├── utils
│ └── __init__.py
│ └──test_utils1.py
|
└── __init__.py
Мой вопрос следующий: Предположим, вы находитесь в области test_foo1.py
файла, чтобы протестировать впечатляющий компонент foo, называемый: foo1
. Вы хотите импортировать следующее:
from foo_components.foo1 import Foo1
Но тогда вы получите сообщение об ошибке из-за двусмысленности: Module not found for foo_components.foo1
.
Вероятно, это связано с тем, что в вашей области видимости модуль foo_components
упоминается как путь модулей: tests.foo_components
. (что означает, что в нем нет foo1
, скорее всего test_foo1
).
Как бы вы элегантно разрешили такой случай? Могу ли я заставить python понять, какой модуль python я имею в виду, кажется, что он автоматически делает предположения как относительный импорт, а не для модуля верхнего уровня.
В вашем решении, пожалуйста, избегайте предлагать импорт с относительным импортом, насколько я знаю, это неплохая практика, что означает что-то вроде from ../../xyz import foo1
. Я подумал о том, чтобы изменить foo_component
, чтобы он не был таким же именем, также при тестировании, но мне тоже не нравится это решение, я думаю, есть какой-то разумный способ. Есть предложения?