Python ошибка импорта "модуль" фабрика "не имеет атрибута" нечеткий "" - PullRequest
0 голосов
/ 29 марта 2020

Я новичок в factory_boy модуле. В моем коде я import factory и затем использовал этот импорт для доступа к нечеткому атрибуту с помощью factory.fuzzy, а затем выдает ошибку module 'factory' has no attribute 'fuzzy'.

Я решил эту проблему, снова импортировав
import factory from factory import fuzzy

при этом не было ошибок.

В чем причина!

1 Ответ

1 голос
/ 30 марта 2020

Почему это происходит?

Когда вы импортируете модуль Python (ваш import factory), вы можете получить прямой доступ к тому, что объявлено в этом модуле (например, factory.Factory): все символы, объявленные в модуль автоматически экспортируется.

Однако, если вложенный модуль не импортирован в его родительский модуль, его необходимо импортировать напрямую.

Здесь доступно factory.Factory, поскольку factory/__init__.py содержит:

from .base import Factory

=> Когда вы набираете factory.Factory, Python ищет символ с именем Factory в factory/__init__.py, который (по приведенной выше строке) является ссылкой на Factory класс, определенный в factory/base.py.

Поскольку в factory/__init__.py нет строки с from . import fuzzy, Python не может загрузить его таким образом.

Но почему бы вам не добавить эта строка?

Другие модули в пакете factory_boy зависят от сторонних пакетов; например, factory.django импортирует Django. Если factory/__init__.py содержит строку from . import django (требуется, чтобы factory.django было доступно из import factory), то для каждой программы, которая запускает import factory, потребуется установить Django.

, чтобы разрешить пользователи пакета сами решали, от чего они зависят; был сделан выбор не добавлять эти прямые импорты на верхний уровень пакета, когда это возможно, - это позволяет будущим версиям добавлять внешние зависимости, не нарушая существующий код.

...