LCD上下文切换器在Fabric中无法工作

1 投票
1 回答
1158 浏览
提问于 2025-04-18 10:32

我正在用Python3.2运行Django,最近发现fabric不支持Python3。

所以我创建了一个新的虚拟环境(fabric-env),专门用来运行fabric。

这是我在虚拟环境中运行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的文档说这个函数应该是可以用的。看起来fabric和Python的版本都足够新(为了确保fabric不是在不同的Python环境下运行,我在虚拟环境内外都运行了这个函数)。

在谷歌上没有找到这个错误信息的相关内容...

1 个回答

2

你还没有导入 lcd。请在你的文件顶部添加以下内容:

from fabric.context_managers import lcd

撰写回答