2017-08-12 117 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"