使Python模块导入明确无误

使Python模块导入明确无误,python,python-3.x,python-import,importerror,Python,Python 3.x,Python Import,Importerror,假设您具有以下项目结构: FooProject ├── foo_components │ ├── __init__.py │ └── foo1.py ├── utils │ ├── __init__.py │ └── utils1.py ├── tests │ ├── __init__.py │ └── foo_components │ ├── __init__.py │ └── test_foo1.py │ ├── utils │

假设您具有以下项目结构:

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 
我的问题如下:
假设您在 TestOf1.1.Py < /C>文件范围内 为了测试名为:
foo1
的壮观的foo组件
您要导入以下内容:

来自foo_components.foo1导入foo1

但是由于歧义,您会得到一个错误:
未找到foo\u组件的模块。foo1

这可能是因为在您的范围内,
foo_组件
模块被称为模块路径:
tests.foo\u组件
。(这意味着它没有
foo1
,更有可能是
test\u foo1

你将如何优雅地解决这样的案件?
我能让python理解我指的是哪个python模块吗?它似乎会自动将假设作为相对导入,而不是顶级模块

在您的解决方案中,请避免建议使用相对导入,据我所知,这是一种不错的做法,意思是类似于.././xyz import foo1的

我想在测试中将
foo_组件
更改为不同的名称,但我也不喜欢这个解决方案,我想有一些合理的方法。

有什么建议吗?

您可以尝试专门从项目根库导入它。 这样地: 从FooProject.foo\u组件导入foo1.py

我很抱歉,在这种情况下,它不会转到其他foo_组件,如果您想转到那里,您可以: 从FooProject.tests.foo_组件导入test_foo1.py