如何在Windows上设置Pycharm调试Fabric fabfile?

11 投票
4 回答
4331 浏览
提问于 2025-04-18 01:38

有没有办法让Pycharm逐步调试一个Fabric的fabfile.py文件呢?

看起来可以通过运行/调试配置编辑器来实现,但我总是设置不对。编辑器让我指定一个要运行的脚本,我试过用fab-script.py文件,但它只给我显示了fab的帮助选项。

感觉我快成功了,但还差一点。

4 个回答

0

对于fabric2(2.5版本),你需要把这些代码添加到fabfile.py文件中,然后像运行Python脚本一样调试它:

if __name__ == '__main__':
    from fabric.main import make_program
    make_program().run("fab [your_task]"
1

fab这个可执行文件其实就是一个简单的Python脚本。比如说,在Fabric 1.10.2版本中,它的内容就是这样(我省略了开头的shebang和编码行):

import re
import sys

from fabric.main import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

也就是说,它实际上就是在调用 fabric.main.main()。我不太确定为什么它要替换掉 sys.argv[0] 中的Windows扩展名,但这并不重要。

如果你想调试一个fabfile,你可以直接把 fab.py 文件设置为你IDE中要调试的脚本,或者创建一个小的“桩”文件,调用fabric的 main() 方法,然后调试这个文件。这样你就可以在你的fabfile中(或者它导入的任何东西中)随意设置断点,就像调试其他Python程序一样。

除此之外,你需要的主要部分是能够将参数传递给执行的脚本,以便它们能出现在 sys.argv 中。如何做到这一点取决于你的IDE或调试工具。或者,你也可以自己手动添加参数,像这样:

import sys
from fabric.main import main

sys.argv[1:] = ["task1",."task2"] #or whatever you would give fab.
main()

当然,使用你的IDE或调试工具的方法要好得多。

3

我按照截图中的说明进行了操作。请注意,上面的fab-script应该包含:

import fabric.main

if __name__ == '__main__':
    fabric.main.main()
15

这是我设置这个过程的方式,希望对其他人有帮助。像这种事情,一旦你知道了关键的设置,其实就很简单了。以下的步骤都是通过PyCharm来完成的,不过有些步骤也可以用其他方式来做。但因为这次是关于在PyCharm中调试,所以我就用这个来说明。同时,我是在Windows系统上操作的。

首先,要在项目环境中安装Fabric包(通过设置-->项目解释器进行包安装)。这会把Fabric安装到虚拟环境的包文件夹里,同时在/Scripts文件夹中放入fab.exe和fab-script.py文件。找到fab-script.py文件的位置,并复制路径(大概是这样的“C:\\Scripts\fab-script.py”)。

接下来,创建一个运行配置(运行-->编辑配置…-->Python),并填入这个脚本文件的名称。脚本参数指向fabfile.py和要执行/调试的命令。脚本参数是:-f fabfile dev:"MyBranch1" deploy。这让我可以用“MyBranch1”参数调试“dev”任务,然后再运行“deploy”任务。把dev:"MyBranch1" deploy替换成你自己的任务名称。工作目录指向你的项目文件夹,这里也应该有fabfile.py(至少在我的配置中是这样)。我的设置看起来是这样的。
RunDebug Configuration

打开fabfile.py,在你想要停止调试的地方设置一个断点。在这个例子中,因为我在调试deploy任务,所以我就在那儿设置了断点。
enter image description here

现在要调试fab运行,把活动配置设置为刚刚创建的那个,然后点击调试。
enter image description here

当断点被触发时,你就可以开始在PyCharm中调试你的fabric fabfile.py了。

当你准备好运行调试过的fabfile时,打开终端,使用调试时的参数运行fab命令。同样,要确保命令提示符指向项目(工作)目录。 (注意:Scripts文件夹中的fab.exe需要能够从命令行执行——这需要在环境变量的路径属性中包含它。)
enter image description here

撰写回答