【问题标题】:Making Python module import unambiguous使 Python 模块导入明确
【发布时间】:2020-07-12 20:35:09
【问题描述】:

假设您有以下项目结构:

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 更改为不同的名称,但我也不喜欢这个解决方案,我想有一些合理的方法。
有什么建议吗?

【问题讨论】:

    标签: python python-3.x python-import importerror


    【解决方案1】:

    您可以尝试专门从项目根库中导入它。 像这样: 从 FooProject.foo_components 导入 foo1.py

    我是这种情况,它不会去其他 foo_components,如果你想去那里,你可以这样做: 从 FooProject.tests.foo_components 导入 test_foo1.py

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-10
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2023-01-15
      • 2015-10-06
      • 2020-12-23
      • 2016-12-15
      相关资源
      最近更新 更多