激活virtualenv INSIDE我当前的bash(无子进程)

时间:2016-02-22 14:26:28

标签: bash virtualenv

  

我希望有一个通用的BASH脚本激活我的虚拟   给定文件夹中的环境。

  • 应该可以从我有虚拟环境的任何文件夹中调用脚本。
  • 如果没有虚拟环境,则应创建一个并安装点数要求。

我不能仅将原始BASH中的激活作为子进程运行(请参阅--rcfile)。只是source - 它无效!

这就是我目前的剧本:

#!/bin/bash -e

# BASH script to run virtual environment

# Show errors
set -x

DIR_CURRENT="$PWD"
DIR_VIRTUAL_ENV="$PWD/venv"
FILE_PYTHON="/usr/bin/python2.7"
FILE_REQUIREMENTS="requirements.txt"
FILE_VIRTUAL_ACTIVATE_BASH="$DIR_VIRTUAL_ENV/bin/activate"

# CD to current folder
cd ${DIR_CURRENT}

echo DIR: $(pwd)

# Create the virtual environment if not existing
if [ ! -d ${DIR_VIRTUAL_ENV} ]; then
    virtualenv -p ${FILE_PYTHON} ${DIR_VIRTUAL_ENV}
    chmod a+x ${FILE_VIRTUAL_ACTIVATE_BASH}
    source ${FILE_VIRTUAL_ACTIVATE_BASH}
    pip install -r ${FILE_REQUIREMENTS}
fi

/bin/bash --rcfile "$FILE_VIRTUAL_ACTIVATE_BASH"

# Disable errors
set +x

我使用Mac OSX 10.10.5和Python 2.7。

可悲的是,现有的123问题无法解决我的问题。

1 个答案:

答案 0 :(得分:0)

首先,您正在尝试做的事情已经通过名为virtualenvwrapper的项目很好地解决了。

关于您的问题:使用函数而不是脚本。将其放入bashrc中,例如:

function enter_venv(){

    # BASH script to run virtual environment

    # Show errors
    set -x

    DIR_CURRENT="$PWD"
    DIR_VIRTUAL_ENV="$PWD/venv"
    FILE_PYTHON="/usr/bin/python2.7"
    FILE_REQUIREMENTS="requirements.txt"
    FILE_VIRTUAL_ACTIVATE_BASH="$DIR_VIRTUAL_ENV/bin/activate"

    # CD to current folder
    cd ${DIR_CURRENT}

    echo DIR: $(pwd)

    # Create the virtual environment if not existing
    if [ ! -d ${DIR_VIRTUAL_ENV} ]; then
        virtualenv -p ${FILE_PYTHON} ${DIR_VIRTUAL_ENV}
        chmod a+x ${FILE_VIRTUAL_ACTIVATE_BASH}
        source ${FILE_VIRTUAL_ACTIVATE_BASH}
        pip install -r ${FILE_REQUIREMENTS}
    fi

    /bin/bash --rcfile "$FILE_VIRTUAL_ACTIVATE_BASH"

    # Disable errors
    set +x
}

你可以这样称呼它:

enter_venv