如何在shell脚本中切换virtualenv?

问题描述 投票:0回答:1

对于我的个人项目,我正在尝试分析各种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吗?谢谢!

python-3.x shell virtualenv virtualenvwrapper
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.