Модули и пакеты

PythonPythonIntermediate
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы изучим, как использовать модули и пакеты Python для организации и повторного использования кода. Мы начнем с простых примеров и постепенно перейдем к более сложным. В конце практического занятия вы будете хорошо разбираться, как использовать модули и пакеты в своих проектах.

Достижения

  • Python-модули
  • Python-пакеты
  • PyPI
Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня средний с процентом завершения 79%. Он получил 100% положительных отзывов от учащихся.

Что такое модули и пакеты Python?

Модуль в Python - это файл, содержащий определения функций, классов и переменных. Мы можем использовать модули для разделения больших программ на более мелкие, управляемые части. Модули также облегчают повторное использование кода в нескольких проектах.

Пакет - это коллекция модулей. Пакеты позволяют нам группировать связанные модули вместе и обращаться к ним с использованием простой точки нотации.

Существует несколько категорий Python-модулей и пакетов:

  1. Встроенные модули: Это модули, которые входят в состав интерпретатора Python и доступны для всех Python-программ. Примерами встроенных модулей являются math, os, sys и random.
  2. Модули стандартной библиотеки: Это модули, которые являются частью стандартной библиотеки Python, но не встроены в интерпретатор. Они могут быть импортированы и использованы аналогично встроенным модулям. Примерами модулей стандартной библиотеки являются json, urllib, re и csv.
  3. Третьи стороны модули: Это модули, которые разрабатываются и поддерживаются отдельными лицами или организациями вне ядра разработки Python. Они могут быть импортированы и использованы аналогично встроенным и модулям стандартной библиотеки, но их необходимо устанавливать отдельно. Существует множество третьих сторонних модулей, охватывающих широкий спектр тем и целей. Некоторые примеры включают numpy, pandas, requests и beautifulsoup4.
  4. Локальные модули: Это модули, которые находятся в том же каталоге, что и Python-программа, которая их использует. Мы можем импортировать локальные модули с использованием инструкции import и имени модуля, не указывая полный путь.
  5. Относительные импорты: Это импорты, которые относительны текущего пакета или модуля. Они позволяют нам импортировать модули и пакеты, которые находятся в другом каталоге, чем текущий. Мы можем использовать относительные импорты для импорта модулей и пакетов, которые являются частью одного проекта, но организованы в другой структуре каталогов.

Кратко говоря, Python-модули и пакеты можно классифицировать в зависимости от их происхождения и способа доступа. Встроенные и модули стандартной библиотеки входят в состав интерпретатора Python и доступны для всех Python-программ, в то время как модули от третьих сторон необходимо устанавливать отдельно. Локальные модули и относительные импорты позволяют нам импортировать модули и пакеты, которые находятся в одном проекте, но имеют другую структуру каталогов.

Вот пример того, как использовать один из встроенных Python-модулей, модуль math.

Откройте новую сессию интерпретатора Python и введите следующий код:

python3
import math

## Вычислить квадратный корень из 16
x = math.sqrt(16)
print(x)  ## Вывод: 4.0

## Вычислить синус pi
y = math.sin(math.pi)
print(y)  ## Вывод: 1.2246467991473532e-16

## Вычислить факториал 5
z = math.factorial(5)
print(z)  ## Вывод: 120

Модуль math - это встроенный Python-модуль, который предоставляет математические функции и константы. Некоторые из функций, доступных в модуле math, включают sqrt(), sin(), cos(), tan(), log(), exp() и factorial(). Модуль math также предоставляет константы, такие как pi и e.

Мы можем использовать инструкцию import для импорта модуля math и затем вызывать его функции и обращаться к его константам в нашем коде.

В приведенном выше примере мы используем функцию sqrt() для вычисления квадратного корня из 16, функцию sin() для вычисления синуса pi и функцию factorial() для вычисления факториала 5. Мы также используем константу pi для представления значения pi в вызове функции sin().

Существует множество других встроенных Python-модулей, которые предоставляют полезные функции и константы. Некоторые примеры включают модуль os для взаимодействия с операционной системой, модуль datetime для работы с датами и временем и модуль random для генерации случайных чисел. Вы можете найти полный список встроенных Python-модулей в документации.

Создание Python-модуля

В этом шаге мы создадим Python-модуль. Модуль - это файл, содержащий Python-код.

Вот простой пример создания и использования Python-модуля:

Сначала создайте новый файл под названием my_module.py в пути /home/labex/project/. Это будет нашим файлом модуля.

В файле my_module.py определите функцию под названием say_hello(), которая выводит приветствие в консоль:

def say_hello():
    print("Hello from my_module!")

Сохраните файл.

Теперь откройте новый Python-файл (или введите в интерпретатор Python) и импортируйте модуль my_module с использованием инструкции import:

import my_module

Для использования функции say_hello() из модуля my_module мы можем вызвать ее так:

my_module.say_hello()  ## Вывод: "Hello from my_module!"

Вот и все! Мы успешно создали и использовали Python-модуль.

Исключение ImportError

Обратите внимание, что при импорте модуля Python ищет файл модуля в текущем каталоге, а также в любых каталогах, перечисленных в переменной окружения PYTHONPATH. Если файл модуля не найден, мы получим исключение ImportError.

Попробуем импортировать модуль, который не существует.

Откройте новое окно терминала и измените текущий каталог на /home/labex/:

cd /home/labex/

Теперь откройте новый интерпретатор Python и попробуйте импортировать модуль my_module:

python3
import my_module

Вы должны получить исключение ImportError:

ModuleNotFoundError: No module named'my_module'

Вы можете добавить каталог в переменную окружения PYTHONPATH, добавив следующую строку в свой Python-файл:

import sys
## my_module.py находится в каталоге /home/labex/project/
sys.path.append("/home/labex/project")

import my_module
my_module.say_hello()

Обратите внимание, что функция sys.path.append() должна быть вызвана перед инструкцией import.

Создание Python-пакета

В этом шаге мы создадим Python-пакет. Пакет - это каталог, содержащий Python-модули.

Давайте усовершенствуем пример из предыдущего шага.

Сначала создайте новый каталог под названием my_package в пути /home/labex/project/. Это будет нашим каталогом пакета.

Внутри каталога /home/labex/project/my_package создайте новый файл под названием __init__.py. Это специальный файл, который сообщает Python, что каталог my_package должен быть обработан как пакет.

Внутри каталога my_package создайте новый файл под названием my_module.py. Это будет нашим файлом модуля.

В файле my_module.py определите функцию под названием say_hello(), которая выводит приветствие в консоль:

def say_hello():
    print("Hello from my_module!")

Теперь откройте новый Python-файл (или введите в интерпретатор Python) и импортируйте пакет my_package:

import my_package

Для использования функции say_hello() из модуля my_module мы можем вызвать ее так:

my_package.my_module.say_hello()  ## Вывод: "Hello from my_module!"

Вот и все! Мы успешно создали и использовали Python-пакет с модулем.

Вот структура каталогов нашего проекта:

my_package/
├── __init__.py
└── my_module.py

Этот пример показывает, как мы можем создать пакет и получить доступ к его модулям с использованием точки нотации. Пакет my_package содержит модуль my_module, и мы можем получить доступ к функции say_hello() из модуля my_module, вызвав my_package.my_module.say_hello().

В этом контексте my_package - это Python-пакет, а my_module - это Python-модуль. Пакеты позволяют нам организовать наш код в иерархическую структуру, что может быть полезно для больших проектов с большим количеством модулей.

Кратко говоря, основное отличие между пакетом и модулем заключается в том, что пакет - это коллекция модулей, к которым можно получить доступ с использованием точки нотации, в то время как модуль - это отдельный файл, содержащий определения функций, классов и переменных.

Третьи стороны пакеты

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

Для Python существует множество пакетов от третьих сторон, охватывающих широкий спектр тем и целей. Некоторые примеры включают numpy для научных вычислений, pandas для анализа данных, requests для работы с HTTP-запросами и beautifulsoup4 для сбора данных с веб-страниц.

Основная причина популярности Python - это обилие пакетов от третьих сторон.

Для установки пакета от третьей стороны мы можем использовать менеджер пакетов pip, который по умолчанию входит в состав Python. Например, чтобы установить пакет requests, мы можем выполнить следующую команду:

pip install requests

Мы также можем использовать другие менеджеры пакетов, такие как conda, для установки пакетов от третьих сторон. См. Anaconda для получения дополнительной информации.

После установки пакета мы можем импортировать его и использовать в нашем Python-коде. Например, вот как мы можем использовать пакет requests для отправки HTTP-запроса и вывода ответа:

python3
import requests

response = requests.get("https://www.example.com")
print(response.text)

Этот код отправляет HTTP-запрос GET по URL-адресу https://www.example.com с использованием пакета requests, а затем выводит текст ответа в консоль.

Функция requests.get() отправляет HTTP-запрос GET по указанному URL-адресу и возвращает объект HTTPResponse, содержащий данные ответа. Объект ответа имеет различные атрибуты и методы, которые позволяют нам получать и обрабатывать данные ответа.

В этом случае атрибут response.text содержит тело ответа в виде строки. Вызовом print(response.text) мы выводим тело ответа в консоль.

Python-пакеты от третьих сторон являются важной частью экосистемы Python, так как они предоставляют готовые решения для общих задач и расширяют функциональность Python. Они могут сэкономить нам время и усилия, предоставляя предварительно построенные решения, которые мы можем использовать в наших проектах, вместо того, чтобы从头开始构建一切。

Кроме того, что пакеты от третьих сторон экономят время и усилия, они также могут помочь нам написать более надежный и поддерживаемый код. Используя хорошо протестированные, широко используемые пакеты, мы можем использовать опыт других и сосредоточиться на решении нашей конкретной проблемы.

В целом, Python-пакеты от третьих сторон - это важный ресурс для расширения функциональности Python и для решения общих задач. Они могут сэкономить нам время и усилия, помочь нам интегрироваться с другими инструментами и библиотеками, и способствовать надежности и поддерживаемости нашего кода.

Резюме

В этом практическом занятии мы узнали, как использовать модули и пакеты Python для организации и повторного использования кода. Мы увидели, как импортировать и использовать модули и пакеты в наших программах, и также узнали, как создавать свои собственные пакеты. Используя модули и пакеты, мы можем писать более чистый и поддерживаемый код.