переключатель контекста lcd не работает в fabric

#python #fabric

#python #fabric

Вопрос:

Я запускаю Django с python3.2 и недавно обнаружил, что fabric не поддерживает Python3.

Поэтому я создал вторую виртуальную среду (fabric-env) только для запуска fabric.

Вот вывод fab —version из virtualenv:

 Fabric 1.9.0
Paramiko 1.14.0
  

python —version

 Python 2.7.3
  

Мой файл fab выглядит следующим образом (только соответствующие строки):

 from fabric.api import local

def deploy(branch_name):
    with lcd('/var/www/finance'):
        local('git pull /home/user1/dev/'   branch_name)
        local('/var/www/finance/finance-env/bin/python3 manage.py test corefinance')
        local('/var/www/finance/finance-env/bin/python3 manage.py schemamigration corefinance --auto')
        local('/var/www/finance/finance-env/bin/python3 manage.py migrate corefinance')
        local('sudo service apache2 restart')
  

Когда я запускаю эту функцию развертывания, я получаю следующую ошибку:

 File "/var/www/finance/fabfile.py", line 19, in deploy
    with lcd('/var/www/finance'):
NameError: global name 'lcd' is not defined
  

В документации fabric говорится, что эта функция должна быть доступна. Похоже, что и fabric, и Python появились достаточно недавно (просто чтобы убедиться, что fabric не пытается запустить другой Python, я запускал эту функцию как внутри, так и за пределами моей виртуальной среды).

В Google нет сообщений об ошибке…

Ответ №1:

Вы не импортировали lcd . Добавьте следующее в начало вашего файла:

 from fabric.context_managers import lcd