Посібник для початківців зі створення та використання пакетів у Python

Уявіть собі складне завдання розробки комплексної програми, обмеженої одним файлом Python. Хоча це технічно можливо, це суперечить основним принципам створення ефективного програмного забезпечення, яке можна підтримувати та багаторазово використовувати. З цих причин пакети та модулі необхідні для створення та розробки програмного забезпечення.

Що таке пакет?

У Python пакет забезпечує спосіб організації логічно пов’язаних модулів і ресурсів разом. Це каталог, який містить кілька модулів, підпакетів та інших ресурсів Python.

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

Різниця між пакетами та модулями

Хоча для організації коду можна використовувати як пакети, так і модулі, між ними є відмінності:

  • Модуль: модуль — це файл, який містить код Python. Він визначає функції, класи, змінні та інші об’єкти, які можна імпортувати та використовувати у своєму коді.
  • Пакет: Пакет — це сукупність одного або кількох модулів, а також може включати підпакети.

Як створити пакет на Python

Щоб створити пакет, виконайте наступні кроки.

Крок 1: Створіть каталог проекту

Почніть із створення каталогу проекту.

 study_bud/

Крок 2: Створіть каталог пакетів

У каталозі вашого проекту створіть ще один каталог, який слугуватиме каталогом пакетів. Дайте йому змістовну назву, яка представлятиме мету або функціональність пакета. Каталог пакунків міститиме модулі та підпакети, пов’язані з вашим пакетом.

 study_bud/
    math_tool/

Крок 3. Визначте файл пакета __init__.py

У каталозі пакунків створіть файл __init__.py. Наявність файлу __init__.py робить каталог пакетом у Python.

Якщо вам потрібно ініціалізувати код кожного разу, коли ви використовуєте пакет, додайте його до файлу __init__.py, інакше він завжди буде порожнім.

 study_bud/
    math_tool/
        __init__.py

Крок 4: Додайте модулі до пакета

У каталозі пакетів додайте модулі Python (.py), які визначають функції, класи або змінні.

Ці модулі містять фактичний код, який забезпечує функціональність вашого пакета. Ви можете створити декілька модулів у каталозі пакунків.

 study_bud/
    math_tool/
        __init__.py
        operations.py
        statistics.py

Крок 5: Додайте підпакети до пакета

Якщо ваш пакет повинен мати ієрархічну структуру або містити різні функції, ви можете створити підпакети в каталозі пакетів.

Підпакет — це просто інший каталог пакунків у головному каталозі пакетів. Кожен підпакет повинен мати свій файл __init__.py. Підпакети дозволяють додатково організувати та розділити код.

 study_bud/
    math_tool/
        __init__.py
        operations.py
        statistics.py
        geometry/
            __init__.py
            shapes.py
        calculus/
            __init__.py
            integrations.py

У цих кроках ви створили пакет math_tool, додали два модулі (operations.py і statistics.py) і два підпакети geometry і calculus, кожен з яких має свої модулі.

Виконуючи ці кроки, ви можете легко організувати пов’язані функції за допомогою пакета та підпакетів, що спростить керування та повторне використання коду.

Як працювати з пакетом у Python

Для роботи з пакетом його потрібно імпортувати. Ключові слова import і from дозволяють імпортувати та використовувати пакет у вашому коді.

 import math_tool 

Ви також можете використовувати крапкову нотацію для імпорту модулів, підпакетів або певних властивостей із пакета. Крапкова нотація дозволяє вам переміщатися структурою каталогу пакетів. Крапкова нотація робить ваші імпортовані файли більш читабельними та легшими для обслуговування.

 from math_tool.operations import add, multiply 

У наведеному вище коді ви перейшли з каталогу пакунків (math_tool) до модуля операцій за допомогою крапкової нотації та імпортували дві функції (додавання та множення).

Абсолютний імпорт проти відносного імпорту

За допомогою абсолютного імпорту ви вказуєте повний шлях від пакета верхнього рівня (кореневого пакета) до потрібного модуля або підпакета. Це найпоширеніший і рекомендований спосіб імпорту модулів і пакетів у Python.

 from math_tool.geometry.shapes import parallelogram

Починаючи з math_tool, перейдіть у підпакет geometry, знайдіть модуль shapes.py та імпортуйте функцію паралелограма.

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

Наприклад, у модулі calculus/integrations.py ви можете використовувати відносний імпорт, щоб імпортувати функцію з модуля shapes.py у підпакет geometry.

 
from ..geometry.shapes import rhombus

Подвійна крапка (“..”) повідомляє Python:

  • Почніть із каталогу підпакетів (calculus), де знаходиться модуль (integrations.py).
  • Перейдіть до каталогу батьківського пакета (math_tool) підпакета.
  • Знайдіть підпакет geometry у батьківському каталозі.
  • Зайдіть у модуль shapes.py та імпортуйте з нього ромб.

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

Імпорт псевдонімів для зручності

Ви можете призначити імпорту псевдонім, що полегшить посилання на нього у вашому коді. Псевдоніми зручні при роботі з довгими іменами пакетів або модулів.

Щоб призначити псевдонім, використовуйте ключове слово as.

 import math_tool.calculus as cal

Як розповсюдити свій пакет на Python

Python надає вам інструменти та платформу для створення та розповсюдження вашого пакета. Розповсюдження вашого пакета дозволяє вам ділитися своїм кодом з іншими розробниками, сприяти співпраці, спрощувати встановлення для користувачів і робити внесок у ширшу спільноту Python.

Крок 1: Створіть обліковий запис на PyPI

Індекс пакетів Python (PyPI) є типовим сховищем для пакетів Python. Ви можете опублікувати свої пакети на PyPI, щоб інші розробники могли легко їх знайти та встановити.

Обов’язково запам’ятайте своє ім’я користувача та пароль, оскільки вони знадобляться для автентифікації під час завантаження пакета в PyPI.

Крок 2. Встановіть інструменти керування пакетами

Ці інструменти спрощують конфігурацію, створення та надсилання розповсюджуваного пакета за допомогою однієї команди.

 pip install build wheel twine

Крок 3. Створіть файл setup.py

Щоб розповсюдити свій пакет, створіть a файл setup.py у кореневому каталозі вашого проекту. Файл setup.py містить метадані про ваш пакет, наприклад його назву, версію, автора, опис, залежності тощо.

Інструменти керування пакетами використовуватимуть файл setup.py для налаштування та створення вашого пакета.

 
from setuptools import setup, find_packages

setup(
    name="<package name>",
    version='1.0.0',
    author="<Your Name>",
    description='A collection of mathematical utility functions',
    packages=find_packages(),
    install_requires=[
        'numpy',
        'scipy',
    ],
)

Крок 4: Створіть пакет

Коли у вас буде готовий файл setup.py, ви можете використовувати його для створення пакета для розповсюдження. У терміналі або командному рядку перейдіть до каталогу, що містить файл setup.py, і виконайте таку команду:

 python setup.py sdist bdist_wheel

Ця команда генерує каталог dist, що містить вихідний пакет дистрибуції (.tar.gz) і пакет дистрибуції колеса (.whl). Ви також побачите каталог збірки та інформації.

Крок 5: Завантажте пакет у PyPI

Коли ваш пакет буде готовий, ви можете завантажити його в PyPI.

Виконайте таку команду:

 twine upload dist/*
> Uploading distributions to https://upload.pypi.org/legacy/
> Enter your username: **********
> Enter your password: **********

Відвідайте свій PyPI на сторінці керування проектами, щоб побачити свій пакет.

Тепер інші розробники, які вважають ваш пакет корисним, можуть установити та використовувати його локально.

Як встановити пакет Python

Менеджери пакетів, такі як pip, спрощують встановлення та керування пакетами Python із різних джерел, у тому числі з індексу пакетів Python (PyPI). Щоб установити пакет за допомогою pip, відкрийте термінал або командний рядок і скористайтеся такою командою:

 pip install <package_name>

Щоб переглянути всі доступні команди та параметри для pip, скористайтеся параметром –help.

Написання чистих модулів

Пакети містять модулі та підпакети, які, у свою чергу, містять інші модулі. Хорошою практикою є модульування коду, особливо під час роботи над великими проектами, оскільки це сприяє кращій організації коду та його читабельності. Тому під час розробки на Python важливо чітко писати модулі.