Розподіл файлів одного пітона: модуль чи пакет?


24

Припустимо, у мене є корисна функція 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.

Питання: Який спосіб є кращим і чому?

EDIT: Оскільки користувач gnat каже, що це питання сформовано погано, я додам, що офіційний підручник з упаковки python, схоже, не коментує, який із описаних вище методів є кращим. Я не надаю особистого списку плюсів і мінусів, тому що мене цікавить, чи існує метод, який бажає отримати спільнота, а не викликати обговорення плюсів і мінусів :)


Обмін дослідженнями допомагає всім . Розкажіть, що ви пробували і чому це не відповідало вашим потребам. Це свідчить про те, що ви знайшли час, щоб спробувати допомогти собі, це позбавляє нас від повторення очевидних відповідей, а найбільше це допомагає вам отримати більш конкретну та релевантну відповідь. Також дивіться Як просити
gnat

1
@gnat: Дякую за посилання на запитання. Я усвідомлюю гарну практику запитань, але в цьому випадку я не вважав за доцільне передати свій досвід, оскільки це, швидше за все, перетворить те, що я задав, як чітке запитання "А" або "Б", в клопотання про думки. Як би ви порадили вдосконалити це питання, не формулюючи його думку?
DanielSank

@gnat: Іншими словами, якби я зацікавився списком плюсів / мінусів двох методів, я б запитав "Які плюси і мінуси цих двох методів", і я включив би свій частковий список.
DanielSank

Відповіді:


17

Ви робите найпростішу річ, яка працює для вас .

Для одного функціонального модуля створити пакет абсолютно немає сенсу. Пакети корисні для створення додаткового простору імен та / або для організації вашого коду через декілька модулів.

The jsonІ unittestмодулі в стандартній бібліотеці Python дійсно пакети, наприклад, для організації коду цілей. Але цілком чудово залишити код, який зараз живе лише в одному файлі python, як один модуль.

Якщо ви хочете приклади:

Для хорошого прикладу проектів, які справді прекрасно використовують пакети, дивіться:

Не існує «офіційної» рекомендації; обидва варіанти цілком дійсні.


Тож офіційно кращого методу немає?
DanielSank

3
Ні, немає кращого методу.
Martijn Pieters
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.