Как включить virtualenv в сценарии оболочки? - PullRequest
0 голосов
/ 04 апреля 2019

В своем личном проекте я пытаюсь проанализировать техническую задолженность различных библиотек python.Для этого я создал скрипт на python, который загружает библиотеку, проверяет каждый объединенный коммит и запускает анализ.Одна часть анализа заключается в получении тестового покрытия.

Самый простой способ, который я нашел для его получения, - это запустить

coverage run --source={library}/ setup.py test

Однако я хочу иметьэто автоматизировано, поэтому я пытаюсь запустить эту команду в сценарии оболочки из сценария python, упомянутого выше.

Сценарий должен изменить каталог для библиотеки, переключиться на virtualenv (автоматически создается на предыдущих этапаханализ) и запустить coverage.Однако он не работает на Requirement error, что указывает на то, что он фактически не переключает virtualenv и остается в virtualenv проекта анализа.

Сценарий оболочки выглядит следующим образом:

#!/usr/bin/env bash

# Args
# $1 proj_path
# $2 proj_name
# $3 venv_name

cd $1
source `which virtualenvwrapper.sh`
workon $3
coverage run --source=$2/ setup.py test
coverage report

И он вызывается из скрипта Python, например:

subprocess.call(["analyzer/run_coverage.sh", self.repo_path, self.repo_name, self.venv_name])

Не могли бы вы помочь мне, как переключить venv в скрипте оболочки?Спасибо!

1 Ответ

1 голос
/ 04 апреля 2019

Сценарий «активировать» активирует виртуальную среду, а «деактивировать» деактивирует виртуальную среду:

https://virtualenv.pypa.io/en/stable/userguide/

Пример цикла для двух виртуальных сред, хранящихся в массиве bash:

venvs=(~/venvs/py3.6.4 ~/venvs/py3.7.0)
$ for i in "${venvs[@]}"
do
  source "$i"/bin/activate
  which python
  python --version
  deactivate
done
/home/gbajson/venvs/py3.6.4/bin/python
Python 3.6.4
/home/gbajson/venvs/py3.7.0/bin/python
Python 3.7.0
...