Python 导入错误 "module 'factory' has no attribute 'fuzzy'"

Python import error "module 'factory' has no attribute 'fuzzy'"

我是 factory_boy 模块的新手。在我的代码中,我 import factory 然后使用此导入通过 factory.fuzzy 访问模糊属性然后它抛出错误 module 'factory' has no attribute 'fuzzy'.

我通过像这样再次导入解决了这个问题
import factory from factory import fuzzy

这样就没有错误了。

这是什么原因!

为什么会这样?

当您导入 Python 模块(您的 import factory)时,您可以直接访问该模块中声明的内容(例如 factory.Factory):模块中声明的所有符号自动导出。

但是,如果嵌套模块没有在其父级中导入,则必须直接导入它。

这里,factory.Factory可用,因为factory/__init__.py包含:

from .base import Factory

=> 当您键入 factory.Factory 时,Python 在 factory/__init__.py 中查找名为 Factory 的符号,这是(根据上面的行)对Factory class 定义在 factory/base.py.

由于factory/__init__.py中没有from . import fuzzy行,Python无法以这种方式加载。

但是你为什么不添加这一行呢?

factory_boy包中的其他模块对第三方包有依赖; 例如,factory.django 导入 Django。如果 factory/__init__.py 包含 from . import django 行(需要从 import factory 获得 factory.django),每个运行 import factory 的程序都需要安装 Django。

为了让包的用户决定他们依赖什么,我们选择尽可能不在包的顶层添加那些直接导入——这允许未来的版本添加外部依赖而不破坏现有代码。