2015-12-30 3 views
1

Я просто не могу понять, почему это происходит ...ткань возвращения 127 с «источником» команды

в моем файле ткани у меня есть это ...

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

Он возвращается 127 на исходной команде, и я не уверен, почему, когда я пытаюсь запустить источник в моем терминале вручную, он работает. Когда я пытаюсь выполнить другую команду в ткани, например ...

local("echo 'foo'") 

он также работает. Почему источником может быть проблема? Я не вижу причин, почему это произойдет.

ответ

3

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!')