Узнайте, как создавать, распространять и использовать пакеты в Python с помощью этого руководства.
Представьте себе сложную задачу разработки комплексного приложения, ограниченного одним файлом Python. Хотя это технически возможно, это противоречит основным принципам создания эффективного, поддерживаемого и многократно используемого программного обеспечения. По этим причинам пакеты и модули необходимы для создания и разработки программного обеспечения.
Что такое пакет?
В Python пакет предоставляет способ организовать вместе логически связанные модули и ресурсы. Это каталог, содержащий несколько модулей, подпакетов и других ресурсов Python.
Пакеты обеспечивают иерархическую структуру, позволяющую организовать код вашего проекта на разных уровнях абстракции.
Разница между пакетами и модулями
Хотя вы можете использовать как пакеты, так и модули для организации кода, между ними есть отличия:
- Модуль: модуль — это файл, содержащий код Python. Он определяет функции, классы, переменные и другие объекты, которые вы можете импортировать и использовать в своем коде.
- Упаковка: Пакет представляет собой набор из одного или нескольких модулей, а также может включать в себя подпакеты.
Как создать пакет в Python
Чтобы создать пакет, выполните следующие изложенные шаги.
Шаг 1: Создайте каталог проекта
Начните с создания каталога проекта.
study_bud/
Шаг 2: Создайте каталог пакетов
Внутри каталога вашего проекта создайте еще один каталог, который будет служить каталогом пакета. Дайте ему значимое имя, которое представляет цель или функциональность пакета. Каталог пакета будет содержать модули и подпакеты, связанные с вашим пакетом.
study_bud/
math_tool/
Шаг 3: Определите файл пакета __init__.py
В каталоге пакета создайте __init__.py файл. Наличие __init__.py file — это то, что делает каталог пакетом в 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 package, добавлено два модуля (операции.py и статистика.ру) и два подпакета геометрия и исчисление каждый со своими модулями.
Следуя этим шагам, вы можете легко организовать связанные функции с помощью пакета и вложенных пакетов, упрощая управление и повторное использование кода.
Как работать с пакетом в Python
Для работы с пакетом его необходимо импортировать. Импортировать и от ключевые слова позволяют вам импортировать и использовать пакет в вашем коде.
import math_tool # entire package
Вы также можете использовать запись через точку для импорта модулей, подпакетов или определенных свойств из пакета. Точечная нотация позволяет перемещаться по структуре каталогов пакетов. Точечная нотация делает ваш импорт более читабельным и простым в обслуживании.
from math_tool.operations import add, multiply # specific functions
В приведенном выше коде вы перешли из каталога пакета (math_tool) к операции модуль, использующий запись через точку, и импортировал две функции (добавлять и умножить).
Абсолютный импорт по сравнению с Относительный импорт
С абсолютныйимпорт, вы указываете полный путь от пакета верхнего уровня (корневого пакета) до нужного модуля или подпакета. Это наиболее распространенный и рекомендуемый способ импорта модулей и пакетов в Python.
from math_tool.geometry.shapes import parallelogram
Начиная с math_tool войти в геометрия подпакет, найдите shape.py модуль и импортировать параллелограмм функция.
Пока родственникимпорт позволяют вам делать импорт относительно текущего местоположения модуля, используя точечную нотацию для указания относительного импорта.
Например, внутри исчисление/integrations.py модуль, вы можете использовать относительный импорт, чтобы импортировать функцию из shape.py модуль в геометрия подпакет.
# calculus/integrations.py
from ..geometry.shapes import rhombus
Двойная точка («..») говорит Python:
- Начните с каталога подпакета (исчисление), где модуль (интеграции.py) существует.
- Зайти в родительский пакет (math_tool) каталог подпакета.
- Найди геометрия подпакет в родительском каталоге.
- Войдите в shape.py модуль и импорт ромб от него.
Таким образом, точечная нотация представляет собой количество каталогов для перехода из текущего каталога модуля.
Псевдоним импорта для удобства
Вы можете назначить псевдоним для импорта, чтобы упростить обращение к нему в коде. Псевдонимы удобны при работе с длинными именами пакетов или модулей.
Чтобы назначить псевдоним, используйте как ключевое слово.
import math_tool.calculus as cal
Как распространять ваш пакет в Python
Python предоставляет вам инструменты и платформу для создания и распространения вашего пакета. Распространение вашего пакета позволяет вам делиться своим кодом с другими разработчиками, способствовать совместной работе, упрощать установку для пользователей и вносить свой вклад в более широкое сообщество Python.
Шаг 1: Создайте учетную запись в PyPI
Указатель пакетов Python (PyPI) — репозиторий по умолчанию для пакетов Python. Вы можете публиковать свои пакеты на PyPI, чтобы другие разработчики могли легко их найти и установить.
Обязательно запомните свой имя пользователя и пароль так как они понадобятся вам для аутентификации при загрузке пакета в PyPI.
Эти инструменты упрощают настройку, сборку и отправку распространяемого пакета с помощью одной команды.
pip install build wheel twine
Шаг 3: Создайте файл setup.py
Чтобы распространить пакет, создайте файл setup.py в корневом каталоге вашего проекта. setup.py файл содержит метаданные о вашем пакете, такие как его имя, версия, автор, описание, зависимости и многое другое.
Инструменты управления пакетами будут использовать setup.py файл для настройки и сборки вашего пакета.
#setup.py
from setuptools import setup, find_packages
setup(
name='' ,
version='1.0.0',
author='' ,
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
Эта команда генерирует расстояние каталог, содержащий исходный дистрибутив (.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 install
Чтобы просмотреть все доступные команды и параметры для точка использовать --помощь вариант.
Написание чистых модулей
Пакеты содержат модули и подпакеты, которые, в свою очередь, содержат другие модули. Хорошей практикой является модульность кода, особенно при работе над крупными проектами, поскольку это способствует лучшей организации кода и его удобочитаемости. Поэтому важно писать модули ясно при разработке на Python.