Системы управления зависимостями
PIP
PIP (Pip Installs Packages) — это стандартная система управления пакетами в Python. Это инструмент командной строки, который позволяет устанавливать, удалять и управлять дополнительными библиотеками и зависимостями, не входящими в стандартную библиотеку Python. Он взаимодействует с Python Package Index (PyPI), чтобы находить, загружать и устанавливать пакеты.
🛠 Основные возможности
Установка пакетов
# Установка последней версии
pip install requests
# Установка конкретной версии
pip install django==4.2.0
# Установка из файла требований
pip install -r requirements.txt
Поиск и информация
# Поиск пакетов в репозитории
pip search "web framework"
# Показать информацию о пакете
pip show django
# Список установленных пакетов
pip list
Управление зависимостями
# Генерация файла зависимостей
pip freeze > requirements.txt
# Установка из файла зависимостей
pip install -r requirements.txt
Обновление и удаление
# Обновление пакета
pip install --upgrade requests
# Удаление пакета
pip uninstall django
# Проверка устаревших пакетов
pip list --outdated
📁 Файл requirements.txt
Файл requirements.txt — это стандартный способ хранения списка зависимостей проекта:
# requirements.txt
Django==4.2.0
requests>=2.25.0
numpy<1.22.0
celery[redis]
Генерирация список всех установленных пакетов
pip freeze > requirements.txt
Установка всех зависимостей
pip install -r requirements.txt
Установка в режиме разработки
pip install -r requirements/dev.txt
Обновить все пакеты до последних версий
pip install --upgrade -r requirements.txt
⚡ Ключевые особенности
Работа с репозиторием PyPI
PIP по умолчанию работает с PyPI (Python Package Index) — официальным репозиторием пакетов Python, содержащим тысячи библиотек.
Разрешение зависимостей
PIP автоматически определяет и устанавливает все необходимые зависимости пакетов, обеспечивая корректную работу устанавливаемых библиотек.
Виртуальные окружения
PIP часто используется вместе с venv для создания изолированных сред, где зависимости проекта не конфликтуют с системными пакетами.
🚀 Практическое использование
Типичный рабочий процесс
# Создание виртуального окружения
python -m venv myproject_env
# Активация окружения
source myproject_env/bin/activate # Linux/Mac
myproject_env\Scripts\activate # Windows
# Установка зависимостей проекта
pip install -r requirements.txt
# Добавление нового пакета
pip install fastapi
pip freeze > requirements.txt
Совместимость с системами
- Работает на всех основных ОС (Windows, Linux, macOS)
- Поддерживает все версии Python (начиная с Python 3.4)
- Интегрируется с инструментами CI/CD
Безопасность
- Проверка цифровых подписей пакетов
- Поддержка HTTPS для загрузки
- Возможность использования приватных репозиториев
Poetry
Poetry — это современный инструмент для управления зависимостями и упаковки Python-проектов. Он объединяет функциональность pip, virtualenv и setuptools в одной удобной системе.
🚀 Ключевые преимущества
-
Единый инструмент
- Управление зависимостями
- Виртуальные окружения
- Сборка пакетов
- Публикация в PyPI
-
Надежность
- Детерминированная установка — одинаковые версии на всех окружениях
- Автоматическое разрешение зависимостей — интеллектуальный алгоритм
- Lock-файл — гарантия воспроизводимости
🛠 Основные команды
Инициализация проекта
# Создание нового проекта
poetry new my-project
# Инициализация в существующей директории
poetry init
Управление зависимостями
# Добавление пакета
poetry add requests
# Добавление с указанием версии
poetry add "django>=4.2.0"
# Добавление пакета для разработки
poetry add --dev pytest
# Удаление пакета
poetry remove package-name
Установка и запуск
# Установка всех зависимостей
poetry install
# Установка без зависимостей разработки
poetry install --no-dev
# Запуск скрипта в виртуальном окружении
poetry run python script.py
# Активация виртуального окружения
poetry shell
📁 Структура проекта
pyproject.toml
Основной файл конфигурации Poetry:
[tool.poetry]
name = "my-project"
version = "0.1.0"
description = "A beautiful project"
authors = ["Your Name <email@example.com>"]
[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.28.0"
django = "^4.2.0"
poetry.lock
Это автоматически генерируемый файл, который фиксирует точные версии всех зависимостей вашего проекта. Это гарантирует, что все разработчики и окружения используют одинаковые версии пакетов. Он содержит хеши пакетов для проверки целостности проекта (должен сходится суммарный итоговый хэш с суммой хешей всех пакетов).
🎯 Основные возможности
Управление версиями Python
[tool.poetry.dependencies]
python = ">=3.8,<3.12"
Группы зависимостей
# Основные зависимости
[tool.poetry.dependencies]
fastapi = "^0.104.0"
# Зависимости для разработки
[tool.poetry.group.dev.dependencies]
pytest = "^7.0.0"
black = "^23.0.0"
# Дополнительные группы
[tool.poetry.group.docs.dependencies]
sphinx = "^7.0.0"
Экстра-зависимости
[tool.poetry.dependencies]
celery = { version = "^5.3.0", extras = ["redis", "aws"] }
Рабочий процесс разработки
# 1. Создать проект
poetry new awesome-api
cd awesome-api
# 2. Добавить зависимости
poetry add fastapi uvicorn
poetry add --dev pytest black
# 3. Активировать окружение
poetry shell
# 4. Установить все зависимости
poetry install
# 5. Запустить приложение
poetry run uvicorn main:app --reload
Миграция с requirements.txt
# Создать pyproject.toml на основе requirements.txt
poetry init --no-interaction
poetry add $(cat requirements.txt)
🏗 Продвинутые возможности
Скрипты и команды
[tool.poetry.scripts]
my-app = "my_package.main:app"
[tool.poetry.plugins."console_scripts"]
my-command = "my_package.cli:main"
Публикация пакетов
# Сборка пакета
poetry build
# Публикация в PyPI
poetry publish
# Публикация в приватный репозиторий
poetry publish -r private-repo
Статьи на Хабре Poetry: from zero to hero
Современный Python: как начать свой проект с нуля при помощи Pyenv и Poetry