Импорт файлов в Python из __init__.py
Вопрос
Предположим, у меня есть следующая структура:
app/
__init__.py
foo/
a.py
b.py
c.py
__init__.py
a.py, b.py и c.py имеют общий тип импорта (logging, os, re и т. д.). Можно ли импортировать эти три или четыре общих модуля из файла __ init __. Py
, чтобы мне не нужно было импортировать их в каждый из файлов?
Изменить. Моя цель - избежать импорта 5-6 модулей в каждом файле, и это не связано с соображениями производительности.
Решение
Нет, они должны быть помещены в пространство имен каждого модуля, поэтому вы должны как-то их импортировать (если вы не передадите logging
в качестве аргумента функции, что было бы странным способом сделать что-то, по меньшей мере).
Но модули все равно импортируются только один раз (и затем помещаются в пространства имен a
, b
и c
), поэтому не надо не беспокойтесь об использовании слишком большого количества памяти или чего-то в этом роде.
Разумеется, вы можете поместить их в отдельный модуль и импортировать , который , в каждый a
, b
и c
, но этот отдельный модуль все равно придется импортировать каждый раз.
Другие советы
Это можно сделать с помощью обычного файла, такого как include.py
, но это противоречит рекомендуемым методам, поскольку включает импорт с использованием подстановочных знаков. Рассмотрим следующие файлы:
app/
__init__.py
foo/
a.py
b.py
c.py
include.py <- put the includes here.
__init__.py
Теперь в a.py
и т. д. выполните:
from include import *
Как указывалось выше, это не рекомендуется, так как импорт с использованием подстановочных знаков не рекомендуется.
Да, но не делайте этого . Серьезно, не надо. Но если вы все еще хотите знать, как это сделать, это выглядело бы так:
import __init__
re = __init__.re
logging = __init__.logging
os = __init__.os
Я говорю не делать это не только потому, что это грязно и бессмысленно, но и потому, что ваш пакет не должен использовать __ init __. py
таким образом. Это код инициализации пакета.