Относительный импорт и пакеты Python

Я пытаюсь создать пакет, и у меня есть древовидная структура, которая выглядит так:

dionesus/ setup.py dionesus/ __init__.py dionesus.py 

Dionesus.py имеет класс Dionesus. Инициализация .py пуста.

Как импортировать класс Dionesus без указания папки верхнего уровня?

Я должен сделать:

 import dionesus d = dionesus.dionesus.Dionesus() 

Я бы хотел, чтобы операторы импорта выглядели так:

 import dionesus d = dionesus.Dionesus() 

One Solution collect form web for “Относительный импорт и пакеты Python”

Во-первых, вы все равно можете использовать абсолютный импорт, просто используя форму from … import :

 from dionesus import dionesus d = dionesus.Dionesus() 

Очевидно, что это будет проблематично, если вам когда-либо понадобится импортировать как dionesus, так и dionesus.dionesus в один и тот же модуль, но это в значительной степени подразумевается в стремлении дать им как одно и то же недиабилизированное имя …

Кроме того, если вы находитесь в родительском или родном брате или другом родственнике dionesus.dionesus, вы можете использовать относительный импорт. В зависимости от того, где вы находитесь, все будет по-другому (в конце концов, это означает относительный); вы можете импортировать . , .dionesus , .. и т. д. Но везде, где бы это ни было, это то же самое from … import формы from … import как указано выше, только с относительным именем, а не с абсолютным. (Фактически, относительный импорт всегда использует форму from .)

 from . import dionesus d = dionesus.Dionesus() 
  • Приоритет импорта Python: пакеты или модули?
  • Относительный импорт пакета __init__.py
  • Python не может найти мой модуль
  • Макет проекта Python и каталогов пакетов
  • Как удалить «сайты-пакеты» моей системы из пути поиска для пакетов Python?
  • Устанавливает ли OS X пакеты с установкой пакетов, которые я поддерживаю с помощью pip?
  • Python для каждого модуля и пакетов
  • Как построить пакет debian с CPack для выполнения setup.py?
  • Python - лучший язык программирования в мире.