Сокращение для длинного пути импорта python

#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 модулем. Это позволяет обрабатывать строки как пути к модулям.