Контекстный менеджер для настройки и демонтажа тестовых виртуальных сред

#python #pytest #pyenv

#питон #пытест #pyenv

Вопрос:

Я хотел бы локально протестировать некоторые из моих компонентов в разных виртуальных средах (с разными версиями python и пакетов).

По сути, делайте то, что позволяют мне делать инструменты CI, такие как действия на github, но локально и из интерфейса python.

Какие инструменты я мог бы использовать для этого. Я начал писать свой собственный, выполняя системные вызовы для выполнения CRUD в средах, установки зависимостей и т. Д. Но я предполагаю, что это достаточно распространенный вариант использования, чтобы иметь существующие решения.

В идеале я мог бы получить экземпляр make context manager, который управлял бы настройкой среды и удалением. Что-то вроде:

 with virtual_environment(virtual_env_name='3.9.0/envs/test2') as v:  # setup my dependencies (within environment `v`)  v.syscall('python -m pip install --upgrade pip')  v.syscall('sudo apt-get -qq update')  v.syscall('sudo apt-get install -y portaudio19-dev python-pyaudio libsndfile1')  v.syscall('pip install scikit-learn')  v.syscall('pip install numpy==1.21.1')    # test what I need to test (within environment `v`)  ...    # on error, or exit, do clean up (perhaps delete the virtual env, etc.)    

Примечание: Я склонен использовать pyenv для сред и pytest для тестирования.