Как управлять зависимостями (requirements.txt, pipenv)?python-16

Управление зависимостями — это важная часть разработки на Python. Зависимости — это внешние библиотеки и пакеты, которые использует ваш проект. Для управления зависимостями чаще всего используются два подхода: requirements.txt и Pipenv. Рассмотрим оба метода подробно.


1. Управление зависимостями с помощью requirements.txt

requirements.txt — это текстовый файл, в котором перечислены все зависимости проекта с указанием их версий. Это самый простой и распространённый способ управления зависимостями.

Как создать requirements.txt?

  1. Установите все необходимые пакеты в вашем виртуальном окружении с помощью pip:

    pip install requests flask pandas
    
  2. Экспортируйте список установленных пакетов в файл requirements.txt:

    pip freeze > requirements.txt
    

    Содержимое файла будет выглядеть так:

    requests==2.26.0
    flask==2.0.1
    pandas==1.3.3
    

Как использовать requirements.txt?

Чтобы установить все зависимости из requirements.txt на другом компьютере или в новом виртуальном окружении, выполните команду:

pip install -r requirements.txt

Преимущества requirements.txt:

  • Простота и универсальность.
  • Подходит для большинства проектов.
  • Легко интегрируется с CI/CD (Continuous Integration/Continuous Deployment).

Недостатки requirements.txt:

  • Не управляет виртуальным окружением автоматически.
  • Требует ручного обновления версий пакетов.

2. Управление зависимостями с помощью Pipenv

Pipenv — это более современный инструмент, который объединяет управление зависимостями и виртуальными окружениями. Он автоматически создаёт и управляет виртуальным окружением, а также использует два файла: Pipfile и Pipfile.lock.

Установка Pipenv

Установите Pipenv с помощью pip:

pip install pipenv

Как использовать Pipenv?

  1. Создайте новый проект или перейдите в существующий:

    cd myproject
    
  2. Установите зависимости с помощью Pipenv:

    pipenv install requests flask pandas
    
    • Pipenv автоматически создаст виртуальное окружение и добавит зависимости в Pipfile.
    • Для разработческих зависимостей (например, тестовых библиотек) используйте флаг --dev:
      pipenv install pytest --dev
      
  3. Активируйте виртуальное окружение:

    pipenv shell
    
  4. Чтобы установить все зависимости из Pipfile, выполните:

    pipenv install
    
  5. Чтобы зафиксировать точные версии зависимостей, используйте:

    pipenv lock
    

    Это создаст или обновит файл Pipfile.lock, который содержит точные версии всех зависимостей.

Файлы Pipfile и Pipfile.lock

  • Pipfile: Содержит список зависимостей и их версий в удобном формате (аналог requirements.txt, но более структурированный).

    [[source]]
    url = "https://pypi.org/simple"
    verify_ssl = true
    name = "pypi"
    
    [packages]
    requests = "*"
    flask = "*"
    pandas = "*"
    
    [dev-packages]
    pytest = "*"
    
  • Pipfile.lock: Содержит точные версии всех зависимостей, включая транзитивные (вложенные) зависимости. Это гарантирует воспроизводимость окружения.

Преимущества Pipenv:

  • Автоматическое управление виртуальным окружением.
  • Удобный формат Pipfile для описания зависимостей.
  • Поддержка разделения зависимостей на основные и разработческие.
  • Воспроизводимость благодаря Pipfile.lock.

Недостатки Pipenv:

  • Медленнее, чем pip (из-за создания Pipfile.lock).
  • Требует установки дополнительного инструмента.

3. Сравнение requirements.txt и Pipenv

Характеристика requirements.txt Pipenv
Управление виртуальным окружением Вручную (через venv) Автоматически
Формат файла Простой текстовый файл Структурированный Pipfile
Фиксация версий Ручное обновление Автоматически через Pipfile.lock
Разделение зависимостей Нет Есть (основные и разработческие)
Скорость Быстро Медленнее (из-за Pipfile.lock)


Резюмируем

  • requirements.txt — это простой и универсальный способ управления зависимостями, который подходит для большинства проектов.
  • Pipenv — это более современный инструмент, который автоматизирует управление виртуальным окружением и зависимостями, обеспечивая воспроизводимость и удобство.
  • Выбор между requirements.txt и Pipenv зависит от сложности проекта и ваших предпочтений. Для небольших проектов подойдёт requirements.txt, а для более сложных — Pipenv.

Используйте тот инструмент, который лучше всего соответствует вашим потребностям, и не забывайте фиксировать зависимости для воспроизводимости вашего проекта!