Windows上的Fabfile路径问题

3
我正在尝试使用Fabric和Mercurial部署我的网站。在Windows命令行中,运行“hg push”完美地工作,没有任何问题。
但是当我尝试写入
local("hg push")

在运行一个Fabfile时,我遇到了错误:
'"hg push"' is not recognized as an internal or external command, operable program or batch file. 

谷歌搜索给了我一个想法,可能是Python子进程中PATH变量的问题,例如在这里:为什么只有当窗口被填充时才会出现“命令未识别”的错误?
你能帮我吗?这个bug是在Fabric还是我的代码中?
谢谢。

目前,Windows对Fabric的支持不太好,所以我对这种情况并不感到惊讶。如果您能提供一些额外的细节,我们可能会做得更好;请使用“with show('everything', 'debug'):”添加调试日志,并包括您PATH的内容。此外,请在当时包括所有的'env'设置。 - Chris R
Chris R: 我仍然不确定问题出在哪里。将所有内容放在show('everything', 'debug')中并没有揭示关于问题的更多信息。我尝试直接设置env.path,但得到了如下奇怪的结果。将local()更改为os.system()则解决了该问题,特别是对于像hg push这样简单的命令。 - Kevin Burke
3个回答

1
正如Chris R所提到的,我们不太支持Windows,因为核心开发人员都不是Windows用户;我们必须依靠更有经验的Windows用户的报告和建议。
听起来这可能与最近修复但尚未发布的错误有关——它将在Fabric 1.0.2中,该版本应该很快就会发布。如果你感觉勇敢,现在可以通过以下方式进行测试:
pip install -e git+git://github.com/bitprophet/fabric@1.0#egg=Fabric

如果您执行fab -V,它应该显示为1.0.2a--如果是这样的话,运行您的fabfile可能会更好。请告诉我们您是否这样做了!

将local()更改为os.system()解决了问题,特别是对于像hg push这样简单的命令。如果您想让我提交错误报告,请告诉我。 - Kevin Burke
按照上述描述更新到1.0.2a对我很有效。在Windows上,使用Fabric 1.0.1的"local('echo %PATH%')"失败,并显示有关不正确文件名的错误消息。但是,在使用Fabric 1.0.2a时,相同的命令按预期工作。 - Andi Albrecht
我使用的是2.4.0版本,但仍然遇到了这个错误。此外,我在使用Fabric时遇到了SSH密钥不兼容的问题,但从终端中使用却没有问题。这个错误与底层SSH客户端无法识别密钥有关。 - TheRealChx101

0

看起来你需要将Mercurial添加到Fabric进程的PATH中。

可以尝试以下操作:

fabric.context_managers.path(<path to your hg.exe>)
run('hg push')

请参阅 path上下文管理器 的文档。不清楚path是否适用于local命令,但明确提到了run命令。

嘿,我试过了,但是它没有添加到env.path中。然后我尝试直接设置env.path。输出是local: PATH=$PATH:"C:\Program Files\Mercurial\hg.exe" hg push,文件名、目录名或卷标语法不正确。 - Kevin Burke

-2

提供的解决方案都没有起作用,但将

local ("hg push")

改为

os.system("hg push")

问题已经解决。


作为一个新手,了解为什么这个问题被投票降低却没有任何评论是很好的。在这里使用os.system有什么问题吗? - jowan sebastian
因为使用 system 是一个不好的做法。而且它在 Fabric 外部控制。无论如何,这对于 Windows 开发人员来说仍然很糟糕,因为它在 2.4.0 上仍然无法工作。 - TheRealChx101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接