在Bash脚本中获取/激活Python VirtualEnv

时间:2017-08-12 22:06:59

标签: python linux django bash unix

我正在尝试编写一个简单的脚本来帮助我激活(源)virtualenv并同时设置一些环境变量。以下是尚未包含任何环境变量的当前版本。

#!/bin/bash

if [ -z "$BASH_VERSION" ]
then
    exec bash "$0" "$@"
fi

# Your script here
script_dir=`dirname $0`
cd $script_dir
/bin/bash -c ". ./django-env/bin/activate; exec /bin/bash -i"

这个脚本的问题有两个。

  1. 当我运行它时 - 看起来成功,因为它将命令行前缀更改为(django-env) - 它前面缺少My-Computer-Name:。显然,它表明我通常以(django-env) My-Computer-Name:作为前缀。

  2. 它不会正确激活virtualenv。也就是说,当我检查which python时,我被告知使用了virtualenv Python。另一方面,当我检查which pipwhich python3时,会使用全局系统的Python。

  3. 我可以做些什么来解决这些问题并激活环境?

2 个答案:

答案 0 :(得分:2)

我怀疑exec /bin/bash -i存在问题 - 已执行的bash可以运行.bash_profile.bashrc来改变当前环境。

不是在shell上执行shell的shell脚本,而是最好创建一个别名或shell函数:

django_activate() {
    cd $1
    . ./django-env/bin/activate
}

将其放入.bashrc,以便它可以在所有shell中使用并以django_activate $venv_dir运行;例如django_activate ~/projects/work

答案 1 :(得分:0)

以下代码执行我打算执行的操作。我用source script.sh

运行它
#!/bin/bash

if [ -z "$BASH_VERSION" ]
then
    exec bash "$0" "$@"
fi

# Your script here
script_dir=`dirname $0`
cd $script_dir
/bin/bash -c ". ./django-env/bin/activate"