Именованный импорт из нескольких подкаталогов одновременно

#python #python-import #directory-structure

#питон #python-импорт #структура каталогов

Вопрос:

Представьте, что у меня следующая структура:

 ├─ main.py
├─ stuff/
   ├─ more_stuff_one/
      ├── main.py
   ├─ more_stuff_two/
      ├── main.py
 

Прямо сейчас, main.py в корневой папке, я делаю:

 from stuff.more_stuff_one import main as more_stuff_one
from stuff.more_stuff_two import main as more_stuff_two
 

Есть ли способ добиться того же результата без необходимости явно просматривать каждую вложенную папку в stuff ? Я хотел бы импортировать каждый main.py из каждой вложенной stuff папки и назвать его как вложенную папку.

Комментарии:

1. Допустим, нам удалось импортировать все сразу. как вы собираетесь использовать main.py ? есть два main.py файла, как вы собираетесь их различать?

2. Присвоив каждому из них уникальный псевдоним (имя родительской папки). Или я что-то упускаю?

3. вы могли бы использовать init.py файл из родительской папки. импортируйте в него дочерние элементы. Затем при использовании: from stuff import more_stuff_one, more_stuff_two

Ответ №1:

вы можете использовать __init__.py файл из родительской папки. импортируйте в него дочерние элементы. Вам все равно придется просматривать вложенные папки, но они будут «скрыты»

 ├─ main.py
├─ stuff/
   ├─ __init__.py
   ├─ more_stuff_one/
      ├── main.py
   ├─ more_stuff_two/
      ├── main.py
 

__init__.py содержимое:

 from stuff.more_stuff_one import main as more_stuff_one
from stuff.more_stuff_two import main as more_stuff_two
 

использование от main.py :

 from stuff import more_stuff_one, more_stuff_two
 

Комментарии:

1. Это просто перенос импорта из одного файла в другой. Мне не нужно явно импортировать все с таким псевдонимом . Во всяком случае, это добавляет больше кода к общему количеству.