fabric 使用 "source" 命令返回 127

fabric returning 127 with "source" command

我只是想不通为什么会这样...

在我的结构文件中我有这个...

def func():
    local("source ../venv/bin/activate")

它在 source 命令上返回 127,我不确定为什么,当我尝试在终端中手动 运行 source 时,它​​起作用了。当我在 fabric 中尝试不同的命令时,比如...

local("echo 'foo'")

它也有效。为什么 source 会引起问题?我看不出会发生这种情况的任何原因。

source sh 未知。如果你想在虚拟环境的上下文中使用 运行 命令,请使用 Fabric 的上下文管理器和 运行 没有源代码的 activate 二进制文件。我改编自 this answer.

from __future__ import with_statement
from fabric.api import *
from contextlib import contextmanager as _contextmanager

env.activate = '. ./.env/bin/activate'

@_contextmanager
def virtualenv():
    with prefix(env.activate):
        yield

def deploy():
    with virtualenv():
        local('echo hello world!')