Skip to content

15. Venv, Poetry и управление зависимостями проекта

BohdanObruch edited this page Mar 27, 2024 · 2 revisions

Данный раздел разделен на несколько частей(каждый пункт - это ссылка на соответствующий раздел):

Виртуальное окружение и управление зависимостями проекта

Venv

Venv — библиотека в дистрибутиве Python, позволяющая создавать виртуальные окружения. Она идёт «из коробки» и её не надо устанавливать отдельно.

  • python3 -m venv --help — вывод справки по командам в Venv;

Создание виртуального окружения

Для создания виртуального окружения необходимо открыть терминал и выполнить команду:

Windows:

python -m venv {name}  # папка получит имя `{name}`, обычно указывают название `venv`;

python -m venv venv

MacOS/Linux:

python3 -m venv {name} # папка получит имя `{name}`, обычно указывают название `venv`;

python3 -m venv venv

После выполнения команды в папке проекта появится папка venv.

Активация виртуального окружения

Для активации виртуального окружения необходимо выполнить команду:

Windows:

venv\Scripts\activate

MacOS/Linux:

source venv/bin/activate

После активации виртуального окружения в терминале появится префикс (venv).

Внутри папка venv выглядит следующим образом:

venv
├── include
├── lib
|   └── ...
├── Scripts
└── pyvenv.cfg
  • в файле pyvenv.cfg прописан путь до Python, его версия и остальные настройки;
  • папка include содержит заголовочные файлы;
  • папка lib содержит библиотеки, которые используются и установлены в виртуальном окружении;
  • папка Scripts содержит исполняемые файлы для Windows.
  • папка bin содержит исполняемые файлы для MacOS/Linux.

Деактивация виртуального окружения

Для деактивации виртуального окружения необходимо выполнить команду:

deactivate

Установка пакетов через pip в виртуальное окружение происходит также, как и в обычном окружении. Например, для установки библиотеки pytest:

pip install pytest

Если в проекте есть файл requirements.txt, то можно установить все зависимости из него:

pip install -r requirements.txt

Команда pip freeze позволяет увидеть все установленные пакеты в виртуальном окружении.

Зависимости в проекте можно отобразить в файл requirements.txt:

selene>=2.0.0rc9  # знак `>` установить версию 2.0.0rc9 и выше
pytest==6.2.5  # знак `==` установить только версию 6.2.5
allure-pytest~=2.9.43  # знак `~=` установить версию 2.9.43 и выше, но не 3.0.0. Это означает, что версия не должна быть выше 2.9.99
allure  # если не указана версия, то установится последняя версия

Более правильный способ для указания зависимостей, это строгое указание версий библиотек. Это позволяет избежать проблем совместимости библиотек. А именно, указывать версии библиотек в файле requirements.txt через ==:

pytest==6.2.5

Virtualenv

Такая же библиотека, как Venv. Важно заметить, что она не идёт по умолчанию вместе с Python. Выполняет те же задачи, но содержит чуть больше функций.

  • pip install virtualenv — установка Virtualenv;
  • virtualenv --help — справка по всем аргументам.

PyPA

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

pipenv

pipenv — объединяет в себе возможности Virtualenv (venv) и pip. К примеру, в pipenv может одной командой создать окружение и установить зависимости.

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

pipenv создаёт файл Pipfile, содержащий в себе все настройки и зависимости, а также файл Pipfile.lock, в котором хранятся хеш-суммы установленных пакетов.

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
pytest = "*"

[dev-packages]
pylint = "*"

[requires]
python_version = "3.11"

В файле:

  • source — источник из которого берутся пакеты;

  • packages — описание зависимостей;

  • dev-packages — зависимости, которые не нужны для запуска проекта, но нужны для разработчика;

  • requires — указание используемой версии Python.

  • url — ссылка на источник пакетов;

  • verify_ssl — проверка SSL-сертификата;

  • name — имя источника.

  • python_version — версия Python.

  • * — устанавливается последняя версия пакета.

  • == — устанавливается строго указанная версия пакета.

  • >= — устанавливается версия пакета и выше.

  • ~= — устанавливается версия пакета и выше, но не выше следующей версии.

Команды:

  • pipenv shell — активация виртуального окружения;
  • pipenv install — установка пакетов;
  • pipenv instal -dev — установка пакетов в [dev-packages].

Poetry

Poetry — решает все те же проблемы, что описаны выше, и выполняет функции pipenv. Также позволяет управлять метаданными проекта.

Команды:

  • poetry --version — справка по версии;
  • poetry --help — справка по функциям и аргументам;
  • poetry new {name} — создание окружения;
  • poetry build — сборка проекта.
  • poetry init — инициализация проекта;

  • poetry install — установка зависимостей;

  • poetry add {package} — добавление пакета;
  • poetry remove {package} — удаление пакета.
  • poetry check — проверка на ошибки в проекте;

После создания Poetry создаёт папку со всем необходимым содержимым. Она включает в себя:

  • tests — папка с тестами;
  • README.rst — файл README;
  • pyproject.toml — файл с метаданными о проекте.

После установки зависимостей, Poetry создаёт файл poetry.lock, в котором хранятся хеш-суммы установленных пакетов.

Файл pyproject.toml содержит в себе метаданные о проекте:

[tool.poetry]
name = "with-poetry"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
license = "MIT"

[tool.poetry.dependencies]
python = "^3.9"

[build-system]
requires = ["poetry-core>=1.0.0"]

[tool.poetry.dev-dependencies]
pytest = "^6.2"
  • name — название проекта;
  • version — версия проекта;
  • description — описание проекта;
  • authors — авторы проекта и их контакты;
  • readme — файл README;
  • license — лицензия проекта;
  • python — версия Python;
  • requires — версия Poetry;
  • dev-dependencies — зависимости для разработки.

Чтобы добавить значение в dev-dependencies, необходимо выполнить команду:

poetry add --dev pytest

А если нужно добавить значение в dependencies, то:

poetry add pytest

Содержание
Командная строка
Кодировка UTF-8 в Java
Список полезных книг для автоматизаторов тестирования на языке Java
Список полезных книг для автоматизаторов тестирования на языке Python Структура проекта Github README.md

Java:
1. Вводное занятие. Сразу к практике.
2. Git. GitHub. Погружаемся.
3. Погружаемся в инструментарий и библиотеки
4. Основы Java
5. Продолжаем разрабатывать автотесты. PageObjects
6. JUnit 5
7. Allure Reports
8. Работа с файлами
9. Selenide #1
10. Jenkins. Создаем первую задачу
11. Управляем параметрами в коде и в Jenkins
12. Отправляем уведомления о результатах прохождения автотестов
13. Учимся быстро разрабатывать проекты для тестовых заданий
14. Selenoid
15. Библиотека Owner
16. REST API. Пишем автотесты с Rest assured
17. REST API. Декомпозируем UI тесты. Подключаем отчетность
18. REST API. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Allure TestOps
21. Переезд на собственную инфраструктуру Java

Python:
1. Вводное занятие. Сразу к практике!
2. Погружаемся в инструментарий и библиотеки
3. Git. GitHub. Погружаемся.
4. Основы Python
5. Selene #1
6. Основы Python. Часть II
7. Основы Python. Часть III
8. Page Object
9. Allure Reports
10. Работаем с файлами Python
11. Jenkins. Создаем первую задачу и управляем параметрами Python
12. Телеграм бот. Отправляем уведомления о результатах прохождения тестов
13. Pytest
14. Selenoid
15. Pytest. Часть II
16. Venv, Poetry и управление зависимостями проекта
17. REST API. Часть I. Пишем автотесты с Requests
18. REST API. Часть II. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Мобильная автоматизация #2. Разрабатываем автотесты с эмулятором Android устройства
21. Allure TestOps
22. Переезд на собственную инфраструктуру Python

Clone this wiki locally