我正在尝试在Mac(Mavericks)上自动删除和重新创建virtualenv。
我有一个文件clean_venv.sh
:
#!/bin/bash
echo "Start"
deactivate
rmvirtualenv test
mkvirtualenv test
这给出了:
Start
./clean_venv.sh: line 3: deactivate: command not found
./clean_venv.sh: line 4: rmvirtualenv: command not found
./clean_venv.sh: line 5: mkvirtualenv: command not found
但是,在同一位置运行命令可以正常工作。为什么是这样?
答案 0 :(得分:0)
虚拟环境是当前shell进程的一项功能。启动新的shell进程(如运行shell脚本)会创建一个不继承虚拟环境的新进程。
鉴于此,您实际上不需要deactivate
。一旦确定它们位于PATH
中,或者如果它们是函数,则可以从虚拟环境的启动文件中导入其他命令。
或者,在当前shell中定义一个函数,然后使用它。
clean_venv () {
echo "Useless noise here."
deactivate
rmvirtualenv test
mkvirtualenv test
}
答案 1 :(得分:0)
受this question启发我发现此代码有效:
#!/bin/bash
source `which virtualenvwrapper.sh`
mkvirtualenv temp # This makes sure I'm not on the test virtualenv,
workon temp # otherwise I can't delete it. deactivate doesn't
# work for some reason
rmvirtualenv test
mkvirtualenv test
workon test
rmvirtualenv temp
pip install -r requirements.txt;
这感觉很酷,但它达到了预期的效果。更新requirements.txt
后,一个命令可以从头开始重新创建virtualenv。最后,我有一个虚拟环境(test
)和temp
不再存在。