#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