对于我的个人项目,我正在尝试分析各种python库的技术欠债。为此,我制作了python脚本,该脚本下载了库,签出到每个合并的提交并运行分析。分析的一部分是获得测试覆盖率。
我发现最简单的方法是运行
coverage run --source={library}/ setup.py test
但是,我想让它自动化,所以我试图在上述python脚本的shell脚本中运行此命令。
脚本应将目录更改为库,切换至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吗?谢谢!
答案 0 :(得分:1)
脚本“激活”激活虚拟环境,而“停用”禁用虚拟环境:
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