Предположим, у меня есть полезная функция или класс python (или любой другой), useful_thing
который вызывается, который существует в одном файле. Существуют два основных способа организации дерева исходных текстов. Первый способ использует один модуль:
- setup.py
- README.rst
- ...etc...
- foo.py
где useful_thing
определяется в foo.py
. Вторая стратегия - сделать пакет:
- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py
где useful_thing
определяется в module.py
. В корпусе чехол __init__.py
будет выглядеть так
from foo.module import useful_thing
так что в обоих случаях вы можете сделать from foo import useful_thing
.
Вопрос: какой путь предпочтительнее и почему?
РЕДАКТИРОВАТЬ: Так как пользователь gnat говорит, что этот вопрос плохо сформирован, я добавлю, что в официальном руководстве по созданию пакетов Python, похоже, не комментируется, какой из методов, описанных выше, является предпочтительным. Я явно не даю свой личный список плюсов и минусов, потому что меня интересует, есть ли предпочтительный для сообщества метод, а не обсуждение плюсов и минусов :)
источник
Ответы:
Вы делаете самое простое, что работает для вас .
Для однофункционального модуля создание пакета абсолютно бессмысленно. Пакеты полезны для создания дополнительного пространства имен и / или для организации вашего кода по нескольким модулям.
json
Иunittest
модули стандартной библиотеки Python действительно пакеты, например, для организации кода целей. Но совершенно нормально оставить код, в настоящее время живущий в одном файле Python, одним модулем.Если вы хотите примеры:
six
это дистрибутив всего одного модуляsetuptools_subversion
,formatflowed
,rtfunicode
.Для хорошего примера проектов, которые действительно отлично используют пакеты, посмотрите на:
requests
Нет официальной рекомендации; оба варианта полностью действительны.
источник