Импорт всех функций из пакета: "from. * Import *"
Цель
Я хочу иметь возможность импортировать (на __init__.py
) все функции из каждого отдельного файла внутри моего пакета.
Применение
Например, в этой структуре папок.
manage.py
- scripts/
-- __init__.py
-- tests.py
-- deploy.py
В настоящее время я делаю следующее:
manage.py:
from scripts import *
script/init.py:
from .tests import *
from .deploy import *
Но каждый раз, когда я добавляю еще один файл в пакет, мне нужно добавить строку импорта на script/__init__.py
, что довольно раздражает.
Ответы
Ответ 2
Вы можете сделать это вручную, но не должны.
Почему вы действительно не хотите этого делать:
Вы получите пространство имен, в которых понимание того, что есть и откуда оно взялось, будет чрезвычайно тяжелым, с трудом увеличиваться по мере того, как это делает общий проект. Appart от совершенно неинтуитивного для Python, подумайте о ком-либо другом, который мог бы просмотреть ваш код или, что еще хуже, подумать о том, что вы перечитываете его через 1 месяц и не вспоминаете, что происходит. Вам это не нужно в вашей жизни.
В дополнение к этому, любые функции, которые вы предоставляете импортеру, которые могут пересекаться с другими функциями в других модулях, будут переданы последним импортированным им. В качестве примера рассмотрим два сценария, которые содержат одну и ту же функцию foo()
и посмотрите, что происходит.
>>> from scrpt1 import *
>>> foo()
Script 1
>>> from scrpt2 import *
>>> foo()
Script 2
Не нужно и в вашей жизни. Особенно, когда это так легко обойти, будучи явным.
Вот некоторые связанные строки из текста, содержащегося в import this
:
Явный лучше, чем неявный.
Внимательно укажите место, где указаны ваши функции. Не "спагетти" вашего кода. Вы захотите поразить себя в будущем, если вы выберете сетку всех вещей в одном месте.
Особые случаи не являются достаточно сложными, чтобы нарушать правила.
Действительно самоочевидно.
Пространства имен - одна хорошая идея - пусть больше таких!
"больше этих!", не меньше; не пропустите, как замечательные пространства имен. Python основан на них; разделение вашего кода в разных пространствах имен является основой организации кода.