10 библиотек Python: для чего нужны, как установить и выбрать

10 библиотек Python: для чего нужны, как установить и выбрать Полезное

Библиотека Python — это набор готового кода (модулей), который вы подключаете через import и вызываете из своей программы, чтобы не писать с нуля HTTP-запросы, разбор таблиц или графики. Ниже — десять библиотек, которые чаще всего встречаются в вакансиях и учебных проектах, таблица «задача — что установить — как импортировать», один сквозной пример на четырех из них и разбор типовых ошибок установки.

Примеры проверены 23.09.2026 на Python 3.14.6 в виртуальном окружении.

Библиотека, модуль, пакет, фреймворк: в чем разница

Эти слова часто смешивают, а от них зависит, что писать в pip install и что в import.

  • Модуль — один файл .py или скомпилированное расширение, которое можно импортировать.
  • Пакет в коде — каталог с модулями (bs4, sklearn). Пакет на PyPI (дистрибутив) — то, что скачивает pip (beautifulsoup4, scikit-learn). Имена могут не совпадать.
  • Библиотека — набор модулей под задачу; ваш код сам решает, когда ее вызвать.
  • Фреймворк — наоборот, сам вызывает ваш код по своим правилам (Django, FastAPI): вы пишете обработчики, а он решает, когда их запустить.

Отдельно стоит стандартная библиотека — модули, которые идут вместе с интерпретатором: json, sqlite3, asyncio, tkinter, pathlib. Их не нужно ставить через pip. Поэтому в список ниже не вошли asyncio и tkinter: они полезны, но уже есть у вас в Python (tkinter в некоторых сборках Linux ставится отдельным системным пакетом).

10 библиотек: таблица задач и установки

Библиотека Для чего pip install import
requests HTTP-запросы к сайтам и API requests import requests
NumPy массивы и быстрые вычисления numpy import numpy as np
pandas таблицы, CSV и Excel, группировки pandas import pandas as pd
Matplotlib графики и диаграммы matplotlib import matplotlib.pyplot as plt
FastAPI веб-API с проверкой типов fastapi from fastapi import FastAPI
Django полный веб-фреймворк: ORM, админка, шаблоны django import django
pytest автотесты pytest запуск командой pytest
SQLAlchemy работа с реляционными БД из Python sqlalchemy import sqlalchemy
BeautifulSoup разбор HTML и XML beautifulsoup4 from bs4 import BeautifulSoup
Pillow обработка изображений pillow from PIL import Image
scikit-learn классическое машинное обучение scikit-learn import sklearn

FastAPI и Django стоят в одной категории «веб», поэтому строк одиннадцать: выбирают обычно одно из двух. Три строки с отличающимися именами (beautifulsoup4 -> bs4, pillow -> PIL, scikit-learn -> sklearn) — частая причина ошибок у новичков.

Как выбрать под задачу

Задача Что взять Когда иначе
Получить данные с сайта или API requests много параллельных запросов в async-коде — httpx или aiohttp
Посчитать и сгруппировать таблицу pandas (внутри на NumPy) данные не помещаются в память — чтение по частям или колоночные движки вроде Polars и DuckDB
Построить график в отчет Matplotlib нужен интерактив в браузере — Plotly или Bokeh
Сделать API FastAPI нужен сайт с админкой и авторизацией из коробки — Django
Вытащить данные из HTML BeautifulSoup обход тысяч страниц — Scrapy; страница строится JavaScript — браузерная автоматизация
Обучить модель на табличных данных scikit-learn нейросети — PyTorch или Keras

Установка: сначала виртуальное окружение

Ставить библиотеки лучше не в системный Python, а в виртуальное окружение проекта. В свежих Debian, Ubuntu и Python от Homebrew системный pip вообще откажет с ошибкой externally-managed-environment (механизм PEP 668).

python3 -m venv .venv
source .venv/bin/activate        # в Windows: .venv\Scripts\activate
python -m pip install requests beautifulsoup4 pandas matplotlib pytest
python -m pip freeze > requirements.txt

Команда python -m pip гарантирует, что пакеты попадут в тот же интерпретатор, которым вы потом запускаете код. Файл requirements.txt фиксирует версии, чтобы проект собрался так же у коллеги и на сервере.

Пример 1: requests — запрос к API

import requests

try:
    resp = requests.get(
        "https://httpbin.org/get",
        params={"q": "python"},
        timeout=10,
    )
    resp.raise_for_status()
except requests.RequestException as exc:
    print("Ошибка запроса:", exc)
else:
    data = resp.json()
    print(resp.status_code, data["args"])

В консоли появится:

200 {'q': 'python'}

Что здесь важно. params сам кодирует параметры в URL — склеивать строку руками не нужно. timeout=10 обязателен: по умолчанию у requests таймаута нет, и при зависшем сервере программа будет ждать бесконечно. raise_for_status() превращает ответы 4xx и 5xx в исключение, иначе ошибка сервера пройдет молча.

Пример 2: HTML -> таблица -> статистика -> график

Один законченный скрипт на четырех библиотеках: BeautifulSoup разбирает HTML, pandas собирает таблицу, NumPy считает, Matplotlib сохраняет график. HTML задан строкой, чтобы пример работал без сети.

from bs4 import BeautifulSoup
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use("Agg")  # рисуем в файл, без окна
import matplotlib.pyplot as plt

HTML = """
<table id="courses">
  <tr><td>Python Basic</td><td>4</td><td>120</td></tr>
  <tr><td>Python Pro</td><td>5</td><td>80</td></tr>
  <tr><td>ML Basic</td><td>5</td><td>95</td></tr>
</table>
"""

def parse(html: str) -> pd.DataFrame:
    soup = BeautifulSoup(html, "html.parser")
    rows = []
    for tr in soup.select("#courses tr"):
        name, months, students = (td.get_text(strip=True) for td in tr.find_all("td"))
        rows.append({"course": name, "months": int(months), "students": int(students)})
    return pd.DataFrame(rows)

df = parse(HTML)
print(df)
print("Среднее студентов:", np.mean(df["students"]).round(1))

ax = df.plot.bar(x="course", y="students", legend=False)
ax.set_ylabel("Студентов")
plt.tight_layout()
plt.savefig("students.png")
print("График сохранен в students.png")

Сохраните как report.py и запустите python report.py:

         course  months  students
0  Python Basic       4       120
1    Python Pro       5        80
2      ML Basic       5        95
Среднее студентов: 98.3
График сохранен в students.png

Рядом появится файл students.png со столбчатой диаграммой. Строка matplotlib.use("Agg") делает поведение предсказуемым и на сервере без экрана: график пишется в файл, окно не открывается; на своем компьютере вместо savefig можно вызвать plt.show(). Данные в таблице учебные.

Пример 3: pytest проверяет функцию parse

from report import parse

def test_parse_counts_rows():
    df = parse("<table id='courses'><tr><td>A</td><td>1</td><td>10</td></tr></table>")
    assert len(df) == 1
    assert df.loc[0, "students"] == 10

def test_parse_empty_table():
    df = parse("<table id='courses'></table>")
    assert df.empty

Файл test_report.py в той же папке, запуск python -m pytest -q:

..                                                                       [100%]
2 passed in 0.41s

pytest сам находит файлы test_*.py и функции test_*, а обычный assert превращает в понятный отчет при падении. Время выполнения у вас будет другим. Упрощение этого примера: при import выполняется весь report.py, включая печать и сохранение графика; в реальном проекте код запуска прячут под if __name__ == "__main__":.

Типовая ошибка: имя в pip не равно имени в import

Неверно:

import beautifulsoup4

Результат:

ModuleNotFoundError: No module named 'beautifulsoup4'

Исправление — импортировать пакет по его имени в коде: from bs4 import BeautifulSoup. То же с Pillow: ставится pillow, а импорт from PIL import Image; import pillow даст ModuleNotFoundError: No module named 'pillow'.

Если не получилось

Симптом Причина Что делать
No module named 'bs4', хотя pip install прошел пакет установлен в другой интерпретатор ставить через python -m pip, проверить python -c "import sys; print(sys.executable)"
externally-managed-environment системный Python защищен от pip создать venv и ставить в него
программа зависает на requests нет timeout передавать timeout= в каждый запрос
график не появляется на сервере нет графической среды matplotlib.use("Agg") и savefig
код из старой статьи падает библиотека сменила API между версиями сверить версию pip show <пакет> с документацией

Безопасность при работе с библиотеками

Сторонний пакет исполняет код с правами вашей программы, поэтому несколько правил стоит соблюдать с первого проекта. Точно проверяйте имя пакета перед установкой: на PyPI встречаются подделки с похожими именами. Фиксируйте версии в requirements.txt или lock-файле и обновляйте их осознанно.

В requests не отключайте проверку сертификата (verify=False) ради «чтобы заработало» — это открывает подмену ответа. При парсинге сайтов соблюдайте условия сайта и не собирайте персональные данные без оснований. Сохраненные модели scikit-learn (через joblib или pickle) загружайте только из доверенного источника: загрузка такого файла может выполнить произвольный код.

Выводы

  • Библиотеку вызывает ваш код, фреймворк вызывает ваш код сам; модули стандартной библиотеки (asyncio, tkinter, json) ставить не нужно.
  • Десять самых ходовых сторонних библиотек закрывают основные задачи: HTTP, вычисления, таблицы, графики, веб, тесты, БД, парсинг HTML, изображения и ML.
  • Имя в pip install и в import может отличаться: beautifulsoup4 -> bs4, pillow -> PIL, scikit-learn -> sklearn.
  • Ставить пакеты в виртуальное окружение через python -m pip и фиксировать версии.
  • У сетевых запросов всегда задавать timeout, проверку сертификатов не отключать, чужие pickle-файлы не загружать.

Где применяется / связь с практикой

Освойте тему на практике

Из этих библиотек складывается большая часть учебных и рабочих проектов на Python: скрипт, который забирает данные по API, чистит их в pandas и строит отчет, или небольшой сервис на FastAPI с тестами на pytest. Чтобы уверенно собирать такие проекты, сначала нужен прочный фундамент языка: типы, функции, классы, исключения, работа с пакетами и окружениями. Его системно дает курс Python Basic.

Освойте тему на практике

Попробовать формат и задать вопросы преподавателям можно на бесплатных открытых уроках.

FAQ

Чем NumPy отличается от pandas?
NumPy работает с однотипными массивами чисел и быстрыми операциями над ними. pandas строится поверх NumPy и добавляет таблицы с подписанными колонками, разными типами данных, чтением CSV и группировками.

Нужен ли Six в 2026 году?
Для нового кода нет: Six решал совместимость Python 2 и 3, а Python 2 не поддерживается с 2020 года. Он может встретиться только как зависимость старых проектов.

Как узнать, какая версия библиотеки установлена?
Команда python -m pip show <пакет> или в коде print(<модуль>.__version__) для библиотек, которые публикуют этот атрибут (requests, numpy, pandas).

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)