2017-08-12 69 views
0

我正在尝试编写一个简单的脚本来帮助我激活(源)virtualenv并同时设置一些环境变量。下面是当前没有任何环境变量的版本。在Bash脚本中采购/激活Python VirtualEnv

#!/bin/bash 

if [ -z "$BASH_VERSION" ] 
then 
    exec bash "$0" "[email protected]" 
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。

我能做些什么来解决这些问题,并激活环境?

+2

不要在子shell中运行 - 直接删除'/ bin/bash -c'。 ./django-env/...'或'source ./django-env/..'。你如何运行脚本? – AChampion

+0

我正在运行'source script.sh'。 – MadPhysicist

+0

它看起来像你试图重新发明轮子 - 尝试[virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/)。 – rafalmp

回答

2

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

而不是在炮弹壳执行你更好地创建一个别名或shell功能的shell脚本:

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

放入.bashrc所以这将是在所有可用的炮弹和运行为django_activate $venv_dir;例如django_activate ~/projects/work

0

下面的代码做我打算做的事情。我运行它source script.sh

#!/bin/bash 

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

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