Импорт из родственных каталогов (python 3)

Я не могу понять, как импортировать модули из родственных каталогов в Python 3, используя абсолютный импорт.

  1. изменить sys.path.
  2. превратите каталог в устанавливаемый пакет pip через __init__.py и setup.py.

Для варианта 1. Я понял, как импортировать модули из родственных каталогов, изменив sys.path, но этот метод кажется мне немного хакерским. Кроме того, я читал, что это нежелательно. Почему? Есть ли что-то изначально неправильное или опасное в модификации sys.path?

Для варианта 2. Что именно мне нужно сделать, чтобы установить пакет pip? Я уже создал свой файл __init__.py, но кажется, что мне нужно создать и настроить сценарий setup.py, чтобы подготовить пакет к распространению? Я все еще нахожусь в режиме разработки, так что это действительно лучший/питоновский метод? Если да, то нужно ли мне просто ввести python setup.py install в свой терминал после создания setup.py?

Редактировать: сейчас я пытаюсь понять это, используя абсолютный импорт, поскольку python 3 поддерживает относительный импорт.


person puketronic    schedule 25.05.2016    source источник


Ответы (1)


Из того, что я читал, Python 3 не поддерживает относительный импорт.

Оно делает.

Чтобы импортировать myproject/foo/__init__.py из myproject/bar/baz.py, вы можете использовать это:

from .. import foo

Или, если вы хотите импортировать объект/модуль в foo:

from ..foo import object

Для этого требуется, чтобы myproject был пакетом, поэтому myproject/__init__.py должен существовать.

person Valentin Lorentz    schedule 25.05.2016
comment
Спасибо. Я попробую это, когда буду дома. А как насчет абсолютного импорта? Можно ли импортировать модули из разных каталогов, используя абсолютный импорт без изменения sys.path? - person puketronic; 25.05.2016
comment
Относительный импорт, не поддерживаемый Python 3, является неявным: docs.python.org/2/tutorial/ - person Andrea Corbellini; 25.05.2016