我正在使用python3.2运行Django,最近发现该结构不支持Python3。

因此,我创建了第二个虚拟环境(fabric-env)来用尽Fabric。

这是virtualenv的fab --version输出:

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和Python都足够新(只是为了确保fabric不会试图运行其他Python,我在虚拟环境的内部和外部都运行了此函数)。

错误消息在Google上没有找到...

最佳答案

您尚未导入lcd。将以下内容添加到文件顶部:

from fabric.context_managers import lcd

10-01 00:04