Должен ли я использовать "из утилит импорта пакета, настройки" или "из утилит импорта импорта, настройки" - PullRequest
4 голосов
/ 23 августа 2009

Я занимаюсь разработкой приложения на Python; он имеет весь свой код в одном пакете и, конечно, работает внутри него. Пакет Python приложения не представляет интереса для интерпретатора для пользователя, это просто приложение с графическим интерфейсом.

Вопрос в том, какой стиль предпочтительнее при импорте модулей внутри пакета приложения

from application import settings, utils

или

from . import settings, utils

То есть я могу указать имя как оно есть (здесь «приложение») или «текущий пакет», используя «.»

Это бесплатный программный пакет, поэтому существует вероятность, что кто-то захочет сделать форк моего приложения и изменить его имя. В этом случае вариант 1 представляет собой небольшую неприятность. Тем не менее, я все время использую стиль 1 (хотя ранний код использует стиль 2 в некоторых местах), так как стиль 1 выглядит намного лучше.

Есть ли какие-либо аргументы для моего стиля (1), которые я пропустил? Или глупо не следовать стилю 2?

1 Ответ

10 голосов
/ 23 августа 2009

Руководство по стилю Python явно не рекомендует относительный импорт (стиль.):

Относительный импорт для импорта внутри упаковки крайне не рекомендуется. Всегда используйте абсолютный путь к пакету для всех импортов. Даже сейчас, когда PEP 328 [7] полностью реализован в Python 2.5, его стиль явного относительного импорта активно не поощряется; абсолютный импорт более переносим и обычно более читабелен.

Я склонен согласиться. Относительный импорт означает, что один и тот же модуль по-разному импортируется в разные файлы и требует, чтобы я помнил, что я смотрю при чтении и записи. Не стоит, и переименование можно сделать с помощью sed.

Помимо проблемы с переименованием, единственная проблема с абсолютным импортом состоит в том, что import foo может означать модуль верхнего уровня foo или подмодуль foo под текущим модулем. Если это проблема, вы можете использовать from __future__ import absolute_import; это стандартно в Python 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...