是否可以在shell脚本中获取vitualenv,然后让执行脚本的shell在新的env中运行?

时间:2015-12-24 20:39:59

标签: python bash shell

是否可以运行一个shell脚本来源我的python virtualenv,然后让shell在新环境中?

这是我的shell脚本

#!/usr/bin/env bash
function createProject() {

    if [ -e $1 ]
    then
        rm -r ./$1
    fi

    if [ -e env-$1 ]
    then
        rm -r ./env-$1
    fi

    virtualenv ./env-$1
    django-admin startproject $1
}

createProject $1

source ./env-$1/bin/activate

exit 1

然后我运行./script.sh hello-world。 基本上如果我运行source ./hello-world/bin/activate我的shell,virualenv将被激活,然后shell将在新环境中运行。 我该如何做到这一点?

1 个答案:

答案 0 :(得分:2)

你想要的只是使用shell函数,因为它们不会产生单独的进程。 您的方法的问题是virtualenv在为运行shell脚本而创建的子流程中激活。

不要使用可执行的shell脚本,而是这样:

function createProject() {

    if [ -e $1 ]
    then
        rm -r ./$1
    fi

    if [ -e env-$1 ]
    then
        rm -r ./env-$1
    fi

    virtualenv ./env-$1
    django-admin startproject $1

    source ./env-$1/bin/activate
}

将其保存为createProject.sh并将此文件源于.bashrc或.bash_profile

source createProject.sh

这样就可以在当前流程中激活virtualenv。