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