#python #python-import
#python #python-импорт
Вопрос:
Учитывая импорт, подобный этому:
from a.very.long.list.of.packages.aaa.bbb.ccc import abc
from a.very.long.list.of.packages.ddd.eee import de
from a.very.long.list.of.packages.fff import f
from a.very.long.list.of.packages import somepackage
есть ли какой-либо способ определить псевдонимы для общей части пути модуля и повторно использовать его?
Я представляю себе что-то вроде этого:
x = a.very.long.list.of.packages
from x.aaa.bbb.ccc import abc
from x.ddd.eee import de
from x.fff import f
from x import somepackage
Комментарии:
1. Попробуйте, если это сработает
2. Нет, в Python такого нет. Как правило, мы стараемся, чтобы имена импорта были короче этого.
3. Однако, как автор
a
пакета, вы можете импортировать, напримерa.very.long.list.of.packages.somepackage
, напрямую,a
чтобы пользователи могли просто делатьfrom a import somepackage
.4. Это сторонняя библиотека или ваша собственная? Если это ваш собственный, вы можете захотеть предоставить некоторые из этих более глубоких вложенных функций в
__init__.py
файле одного из вышестоящих модулей.
Ответ №1:
Учитывая x = a.very.long.list.of.packages
, Python попытается разрешить все атрибуты и немедленно завершится ошибкой, поскольку имя a
не определено. Если он уже существует, маловероятно, что он имеет атрибут very
, а объект, на который указывает этот атрибут, имеет атрибут long
и так далее. В любом случае, все, что находится справа от оператора присваивания, будет вычислено для некоторого объекта, и импортировать данные из объектов с from ... import ...
помощью.
Вы можете использовать динамический импорт со встроенным importlib
модулем. Это позволяет обрабатывать строки как пути к модулям.