#python #python-3.x #import #python-import
#python #python-3.x #импорт #python-импорт
Вопрос:
В настоящее время я работаю над проектом, в котором основной файл находится в каталоге вместе с подкаталогом с некоторыми дополнительными файлами:
project
|- folder
| |- __init__.py
| |- file1.py
| |- file2.py
| |- file3.py
|- main.py
При пустом файле инициализации.
В моем случае я хотел бы импортировать все файлы в свой текущий main.py используя как можно меньше кода. Вот в чем загвоздка:
Работает
from folder.file1 import somefunction1
from folder.file2 import somefunction2
somefunction1()
somefunction2()
Работает
from folder import file1
from folder import file2
file1.somefunction1()
file2.somefunction2()
Не работает
import folder
folder.file1.somefunction1()
folder.file2.somefunction2()
AttributeError: module 'folder' has no attribute 'file1'
Я понимаю значение сообщения об ошибке, но не совсем понимаю, почему оно возникает. В моем первом примере я могу вызвать folder .file и folder.file2 в качестве атрибутов, но в моем последнем примере я не могу?
К сожалению, я нашел только похожие вопросы о том, как импортировать файлы из папок в целом, но ничего об этой конкретной проблеме.
Что именно Python делает в фоновом режиме и есть ли способ исправить мою проблему?
Комментарии:
1. Что в вашем
__init__.py
? Я думаю, что для того, чтобы 3-й работал, в__init__.py
вы должны включитьimport file1
иimport file2
.2. В настоящее время он пуст, вставка
import file1
дает мнеModuleNotFoundError: No module named 'file1'
(и да, мой файл называется точно так же 🙂
Ответ №1:
Вам нужно добавить
from . import file1
в вашем _init_.py
это приведет к помещению file1 в папку, к которой вы затем сможете получить доступ из main.py
Ответ №2:
в вашем init.py файл
__all__ = ["file1","file2","file3"]
в main.py
from folder import *
file1.somefunction1()
file2.somefunction2()