对于我的个人项目,我正在尝试分析各种python库的技术债务。为此,我制作了下载库的python脚本,检查每个合并的提交并运行分析。分析的一部分是获得测试覆盖率。
我发现获得它的最简单方法是运行
coverage run --source={library}/ setup.py test
但是,我希望自动化,所以我试图在上面提到的python脚本的shell脚本中运行此命令。
脚本应将dir更改为库,切换到virtualenv(在分析的前面步骤中自动创建)并运行coverage
。然而,它在Requirement error
上失败,这表明它实际上没有切换virtualenv并保持在分析项目的virtualenv中。
shell脚本如下所示:
#!/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])
你能帮我解决一下如何在shell脚本中切换venv吗?谢谢!
脚本“激活”激活虚拟环境,“停用”激活虚拟环境:
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