使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
我的问题如下:假设您在
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