【发布时间】:2009-03-21 23:14:11
【问题描述】:
我正在尝试编写(我认为会是)一个简单的 bash 脚本,它将:
- 运行 virtualenv 以 1 美元创建一个新环境
- 激活虚拟环境
- 做更多的事情(安装 django,将 django-admin.py 添加到 virtualenv 的路径等)
第 1 步效果很好,但我似乎无法激活 virtualenv。对于那些不熟悉 virtualenv 的人,它会创建一个 activate 文件来激活虚拟环境。在 CLI 中,您使用 source 运行它
source $env_name/bin/activate
$env_name 显然是安装虚拟环境的目录的名称。
在我的脚本中,创建虚拟环境后,我将激活脚本的路径存储为:
activate="`pwd`/$ENV_NAME/bin/activate"
但是当我打电话给source "$activate" 时,我得到了这个:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
我知道$activate 包含激活脚本的正确路径,实际上我什至在调用source 之前测试了一个文件是否存在。但是source 本身似乎找不到它。我还尝试在 CLI 中手动运行所有步骤,一切正常。
在我的研究中,我发现了this script,它与我想要的类似,但也做了很多我不需要的其他事情,比如将所有虚拟环境存储在 ~/.virtualenv 目录中(或 $WORKON_HOME 中的任何内容)。但在我看来,他正在创建通往activate 的路径,并以与我基本相同的方式调用source "$activate"。
这是完整的脚本:
#!/bin/sh
PYTHON_PATH=~/bin/python-2.6.1/bin/python
if [ $# = 1 ]
then
ENV_NAME="$1"
virtualenv -p $PYTHON_PATH --no-site-packages $ENV_NAME
activate="`pwd`/$ENV_NAME/bin/activate"
if [ ! -f "$activate" ]
then
echo "ERROR: activate not found at $activate"
return 1
fi
source "$activate"
else
echo 'Usage: djangoenv ENV_NAME'
fi
免责声明:我的 bash script-fu 很弱。我对 CLI 相当满意,但很可能有一些非常愚蠢的原因,这不起作用。
【问题讨论】:
标签: bash virtualenv