使用fabric时找不到workon命令

时间:2013-08-28 02:29:49

标签: python bash fabric

我的结构文件:

def deploy():
   code_path = 'mysite/public_html/mysite'
   with cd(code_path):
      with prefix("workon mysite"):
         run('git pull')
         run('supervisorctl -c ~/supervisord.conf restart ' + env.host_string)

我收到以下错误:

Aborting.
[myserv] out: /bin/bash: workon: command not found

显然,当我手动执行(没有结构)时,workon命令有效。我怀疑/usr/local/bin/virtualenvwrapper.sh没有被采购(通常是通过.bash_profile运行)。

要使workon命令正常工作,我需要做什么?

3 个答案:

答案 0 :(得分:7)

尝试使用以下方法修改前缀:

  with prefix(". /usr/local/bin/virtualenvwrapper.sh; workon mysite"):

答案 1 :(得分:3)

您必须将此虚拟包装器加载代码从.bashrc复制到.bash_profile文件,如果不存在,请创建新的.bash_profile文件并复制到那里。

要复制的代码::

export WORKON_HOME=/home/virtual
source /usr/local/bin/virtualenvwrapper.sh

发生此错误是因为.bashrc仅由同时具有交互和非登录的shell读取。所以在这种情况下它不是交互式非登录shell,所以它不会起作用。所以我们必须将这些代码复制到.bash_profile文件。

reference link

答案 2 :(得分:0)

我将 pyenv 与插件 pyenv-virtualenvwrapper 一起使用。我在 workon 上没有成功,而是使用了这个(fabric 2.5):

with c.prefix('source /home/mirek/.virtualenvs/%s/bin/activate' % PROJECT):
    with c.prefix('cd /home/mirek/dj/%s/%s' % (PROJECT, PROJECT)):
        c.run('python manage.py ....')