Всё, что вы писали до сих пор, обходилось встроенными в Python возможностями: math, random, свои функции. Но рано или поздно понадобится то, чего в стандартной библиотеке нет — например, библиотека для запросов к сайтам или для работы с таблицами. Такие библиотеки пишут другие разработчики и выкладывают в открытый доступ. Разберёмся, как их ставить, как не перепутать версии между разными проектами и какой инструмент для этого выбрать сегодня.
pip: как ставить чужие библиотеки
Представьте магазин приложений на телефоне. Сам телефон умеет немногое из коробки — звонить, фотографировать. Всё остальное вы доставляете отдельно, одним нажатием: приложение скачивается и сразу готово к работе. С Python то же самое: язык из коробки умеет базовые вещи, а тысячи готовых решений для конкретных задач лежат отдельно, и их нужно «доставить» одной командой.
Официально этот «магазин приложений» для Python называется PyPI (Python Package Index) — открытый каталог библиотек, которые пишут разработчики со всего мира. А инструмент, который скачивает и устанавливает их к вам на компьютер, называется pip — менеджер пакетов Python. Он идёт в комплекте с самим Python, ставить его отдельно не нужно. Установленную библиотеку называют пакетом, и после установки её можно подключить через уже знакомый import.
pip install requests
Разберём эту команду:
pip— название программы, которую вы вызываете из терминала (не из Python-файла).install— команда для pip: «установи пакет».requests— имя пакета на PyPI, который нужно скачать. pip найдёт его на pypi.org, скачает и положит в специальную папку, где Python ищет установленные библиотеки.
После установки пакет доступен в любом вашем скрипте через import, как будто это часть языка:
import requests
response = requests.get("https://api.github.com")
print(response.status_code)
import requests— подключаем только что установленный пакет, ровно так же, как раньше подключалиmathилиrandom.response = requests.get(...)— вызываем функциюgetиз пакета requests, она отправляет запрос на сайт и возвращает объект с ответом.print(response.status_code)— печатаем код ответа сервера. Выведется200— это стандартный код, означающий «всё хорошо, сервер ответил».
Важно. Команды pip install, pip list и все остальные в этом уроке вы вводите в терминале (командной строке), а не в файле с Python-кодом и не в интерпретаторе Python. Это разные инструменты: терминал управляет компьютером и программами, Python-код выполняет вычисления.
Версии пакетов: почему это важно
Представьте рецепт пирога, в котором написано просто «мука» без количества и сорта. Один раз получится хорошо, другой раз — мука окажется другая, и пирог не выйдет. С библиотеками похожая история: авторы время от времени выпускают новые версии, и иногда в новой версии меняют поведение функций так, что старый код перестаёт работать. Поэтому важно уметь указывать, какая именно версия нужна.
Официально номер версии указывают после имени пакета через специальные знаки сравнения — это называется фиксацией версии.
pip install requests==2.31.0
pip install requests>=2.25.0
requests==2.31.0— знак==требует ровно эту версию, ни новее, ни старее. Используйте, когда важно, чтобы у всех в команде и на сервере была одна и та же версия.requests>=2.25.0— знак>=разрешает эту версию и любую более новую. Используйте, когда важна только минимальная граница, а новые версии не страшны.
Удалить пакет, который больше не нужен, можно похожей командой:
pip uninstall requests
uninstall убирает сам пакет, но не трогает те библиотеки, которые он с собой подтянул — они могли понадобиться и другим пакетам, поэтому pip их не удаляет автоматически.
requirements.txt: как передать список библиотек другому человеку
Представьте, что вы закончили проект и отправляете его коллеге. У вас на компьютере установлено пять библиотек нужных версий, а у коллеги — ничего из этого. Перечислять всё голосом или в чате неудобно и ненадёжно. Нужен список покупок, который можно скопировать и выполнить одной командой.
Официально такой список называется файлом requirements.txt — обычный текстовый файл, где каждая строка это имя пакета и его версия. Получить его можно командой pip freeze, которая печатает все установленные у вас пакеты в нужном формате.
pip freeze > requirements.txt
pip freeze— печатает список установленных пакетов в форматеимя==версия, по одному на строку.>— знак перенаправления: вместо того чтобы напечатать список на экран, эта команда записывает его в файл.requirements.txt— имя файла, куда всё запишется. Такое имя все инструменты ожидают по умолчанию.
Получившийся файл выглядит примерно так:
certifi==2023.7.22
requests==2.31.0
urllib3==2.0.7
Этот файл сохраняют вместе с проектом. Коллега, получив проект, ставит всё одной командой:
pip install -r requirements.txt
Флаг -r означает «установи из файла»: pip читает requirements.txt построчно и ставит каждый пакет нужной версии. Отдельно есть команда pip list — она тоже показывает установленные пакеты, но в удобной для чтения таблице, а не в формате для сохранения в файл, поэтому для requirements.txt всегда используют именно freeze.
Виртуальное окружение: отдельная коробка для каждого проекта
Представьте, что у вас два проекта на одном компьютере, и одному нужна старая версия библиотеки, а другому — новая. Если ставить пакеты «глобально», на весь компьютер сразу, версия может быть только одна: поставите новую для второго проекта — сломаете первый. Это как если бы у всех вещей в доме было только одно общее место на полке, и новая вещь всегда сталкивала старую.
Официально решение называется виртуальным окружением (venv, от английского virtual environment) — это отдельная изолированная папка со своим набором пакетов для одного конкретного проекта. Каждый проект получает свою «коробку», и пакеты в разных коробках друг другу не мешают. Модуль venv для создания таких коробок встроен в Python, ставить его отдельно не нужно.
python -m venv venv
python -m venv— запускаем встроенный модульvenvчерез Python (флаг-mозначает «выполни модуль как программу»).- второе
venv— имя папки, которую нужно создать. Так называть папку необязательно, но так делает большинство разработчиков, чтобы сразу было понятно её назначение.
После создания окружение нужно включить — активировать. Команда отличается на разных системах:
source venv/bin/activate
venv\Scripts\activate
Первая строка — для Mac и Linux, вторая — для Windows. После активации в начале строки терминала появляется название окружения в скобках, например (venv) — это знак, что все команды pip install дальше устанавливают пакеты не глобально, а именно в эту изолированную папку. Выключить окружение можно командой deactivate, она работает одинаково на всех системах.
Правило. Для каждого проекта — своё виртуальное окружение. Саму папку окружения в git не сохраняют: она может быть большой и легко пересоздаётся заново командой pip install -r requirements.txt на любом компьютере. В git попадает только requirements.txt.
uv: тот же результат в одном инструменте
Вы только что видели, что для одного простого проекта нужно помнить несколько отдельных команд: создать окружение, активировать его, поставить пакеты, не забыть обновить requirements.txt. Представьте кухонный комбайн, который заменяет сразу нож, тёрку и миксер — включаете один прибор вместо трёх. Именно такую роль для Python-инструментов играет uv.
Официально uv — это современный менеджер пакетов и проектов для Python, который в одной программе объединяет то, что раньше делали pip и venv по отдельности, и делает это заметно быстрее. Одной командой можно создать новый проект целиком, со своим окружением и конфигурацией:
uv init myproject
cd myproject
uv init myproject— создаёт папкуmyprojectи сразу кладёт туда виртуальное окружение, стартовый файл и файл настроек проекта — всё за одну команду, без отдельногоvenv.cd myproject— уже знакомая команда терминала: переходим внутрь только что созданной папки.
Файл настроек проекта называется pyproject.toml — это современная замена requirements.txt, куда uv сам записывает зависимости при их добавлении:
uv add requests
uv add requests делает сразу три вещи: ставит пакет в окружение проекта, дописывает его в секцию dependencies файла pyproject.toml и обновляет отдельный файл с точными версиями всех зависимостей — uv.lock. Ничего из этого не нужно делать вручную, как раньше через pip freeze.
Запустить программу внутри окружения проекта можно без отдельной активации:
uv run main.py
uv run сам находит окружение текущего проекта и запускает в нём указанный файл, поэтому шаг с source venv/bin/activate здесь не нужен вообще. А когда проект нужно развернуть на другом компьютере, вместо pip install -r requirements.txt используют:
uv sync
uv sync читает файл uv.lock и ставит ровно те версии пакетов, что там зафиксированы, — поэтому окружение на новом компьютере получается точно таким же, вплоть до последней цифры версии.
pip и uv рядом: что чем заменяется
| Задача | pip и venv | uv |
|---|---|---|
| Создать окружение | python -m venv venv |
Автоматически при uv init |
| Установить пакет | pip install requests |
uv add requests |
| Зафиксировать версии | pip freeze > requirements.txt |
Автоматически в uv.lock |
| Установить всё на новой машине | pip install -r requirements.txt |
uv sync |
| Запустить скрипт | Сначала activate, потом python main.py |
uv run main.py |
Забывать pip не нужно: он встроен в Python и встречается в подавляющем большинстве старых и учебных проектов. uv стоит держать в голове как более быстрый и удобный вариант для новых проектов — тем более что он умеет читать requirements.txt и устанавливать пакеты тем же способом, если вы попадёте в чужой проект, где ещё используется pip.
Частые ошибки
Установка пакета без активного окружения. Если вы создали venv, но забыли его активировать, команда pip install поставит пакет глобально, а не в окружение проекта. Проверяйте, что в начале строки терминала есть (venv), прежде чем ставить пакеты.
Путаница pip list и pip freeze. pip list печатает красивую таблицу для человека, а requirements.txt нужен в формате имя==версия. Если вставить в requirements.txt вывод pip list, файл окажется нечитаемым для pip. Для сохранения в файл всегда используйте pip freeze.
Забытая папка окружения в git. Папка venv (или .venv у uv) может весить сотни мегабайт и содержит пути конкретного компьютера — на чужой машине она просто не заработает. Добавляйте её в .gitignore и полагайтесь на requirements.txt или uv.lock, чтобы воссоздать окружение заново.
Что важно запомнить
- pip — менеджер пакетов Python, идёт вместе с языком.
pip install имяставит библиотеку с PyPI. - Версию фиксируют знаками
==(ровно эта) и>=(не ниже этой):pip install requests==2.31.0. pip freeze > requirements.txtсохраняет список зависимостей в файл,pip install -r requirements.txtвосстанавливает его на другом компьютере.- Виртуальное окружение (
python -m venv venv, активация черезsource venv/bin/activateилиvenv\Scripts\activate) изолирует пакеты одного проекта от другого. - uv — более быстрый современный инструмент:
uv initсоздаёт проект,uv addставит пакет и сам обновляетpyproject.tomlиuv.lock,uv runзапускает код без ручной активации,uv syncвосстанавливает окружение. - Папку окружения (venv или .venv) в git не сохраняют — только requirements.txt или пару pyproject.toml и uv.lock.
Проверьте себя
7 вопросов
Проверка установленных пакетов
Напишите функцию get_package_version(package_name), которая возвращает версию установленного пакета с помощью модуля importlib.metadata. Если пакет не найден, функция должна вернуть строку "Package not found".
Проверьте версию пакета pip и выведите её на экран.