Относительный импорт Python уже не сильно обескуражен, но в этом случае настоятельно рекомендуется использовать absolute_import.
Пожалуйста см this discussion не ссылаясь сам Гвидо:
«Разве это в основном исторический До нового относительного импорта синтаксиса был реализован были различные проблемы с относительными импорта краткосрочное решение было?. рекомендовать не использовать их. Долгосрочное решение состояло в том, чтобы реализовать однозначный синтаксис. Теперь пришло время, чтобы снял антирекомендацию. Конечно, не переходя за борт - я все еще нахожу их приобретенным вкусом, но они имеют свое место."
ОП правильно связывает PEP 328, который говорит: были представлены
Несколько вариантов использования, наиболее важными из которых являются , способного изменить структуру больших пакетов без редактирования подразделов -packages. Кроме того, модуль внутри пакета не может легко импорт себя без относительного импорта.
Также см почти дубликат вопрос When or why to use relative imports in Python
Конечно, это все еще стоит как бы по вкусу. Хотя легче перемещать код с относительным импортом, это также может неожиданно нарушить вещи; и переименование импорта не так уж сложно.
Чтобы заставить новое поведение из PEP 328 использования:
from __future__ import absolute_import
В этом случае неявный относительный импорт больше не будет возможным (например, import localfile
больше не будет работать, только from . import localfile
.). Для чистого и будущего поведения, рекомендуется использовать absolute_import.
Важное предостережение, что из-за PEP 338 и PEP 366, относительный импорт необходим файл питона, чтобы импортировать как модуль - вы не можете выполнить file.py, который имеет относительный импорт или вы получите ValueError: Attempted relative import in non-package
.
Это ограничение следует учитывать при оценке наилучшего подхода. В любом случае Гвидо выступает против запуска скриптов из модуля:
Я нахожусь на этом и на любых других предлагаемых твидлингах машины __main__. Единственный случай использования, похоже, заключается в том, что скрипты выполняются внутри каталога модуля, который я всегда рассматривал как антипаттерн. Чтобы заставить меня передумать, вы должны были бы убедить меня, что это не так.
Исчерпывающие обсуждения по этому вопросу можно найти на SO; число рейнольдса Python 3 это весьма всеобъемлющий:
Да, он не был там последний раз, когда я прочитал PEP 8! –
@ Rafe, «посмотрите на некоторые хорошо написанные проекты ...» любые предложения? – denis
@Denis: Rietveld - собственный проект Guido van Rossum, поэтому я бы предположил, что это будет хорошее место для поиска (http://code.google.com/p/rietveld/). Стандартная библиотека Python не так велика, многие из этого кода не соответствуют соглашениям. –