Фактическая проблема, с которой вы столкнулись при использовании одного импорта, связана с пакетами имеющий приоритет над модулями:
Обратите внимание, что при использовании from package import item
элемент может быть либо подмодулем (или подпакетом) пакета, либо каким-либо другим именем, определенным в пакете, например, функцией, классом или переменной. Оператор import
сначала проверяет, определен ли элемент в пакете; если нет, он предполагает, что это модуль, и пытается загрузить его. Если его не удается найти, возникает исключение ImportError
.
В любом случае, я бы настоятельно предложил переименовать файл или каталог, поскольку вы не можете импортировать более одного модуля с заданным именем. Проблема возникает из-за того, что каждый объект модуля/пакета хранится в sys.modules
, который является простым dict
и поэтому не может содержать несколько одинаковых ключей.
В частности, если предположить, что каталоги foo.py
и foo
находятся в разных каталогах (и если это не так, вы все равно не можете импортировать foo.py
), при выполнении:
from foo import gaz
Он загрузит foo.py
и поместит модуль в sys.modules
, а затем попытается сделать:
from foo.bar import wakaka
Произойдет сбой, поскольку импорт пытается использовать модуль foo.py
вместо пакета.
Противоположное произойдет, если вы сначала импортируете foo.bar
; импорт будет использовать пакет вместо модуля.
person
Bakuriu
schedule
26.04.2013