我使用python3.2运行Django,最近发现fabric不支持Python3。
所以我创建了第二个虚拟环境(fabric-env)来运行fabric。
下面是virtualenv的fab——version输出:
Fabric 1.9.0
Paramiko 1.14.0
python——版本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,我在虚拟环境内外都运行了这个函数)。
未导入lcd
。将以下内容添加到文件的顶部:
from fabric.context_managers import lcd