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

时间:2014-04-06 20:44:28

标签: python debugging pycharm fabric

是否可以设置Pycharm来逐步完成Fabric fabfile.py?

似乎这对于运行/调试配置编辑器是可行的,但我似乎无法正确地进行设置。编辑器要求运行一个脚本,我已经尝试了fab-script.py文件,它只是给了我晶圆帮助选项。

似乎我很接近,但并不完全在那里。

4 个答案:

答案 0 :(得分:14)

以下是我最终设置它的方法,以防这对其他人有用。和大多数这样的东西一样,一旦你知道魔法设置,就很容易了。所有这些指令都是通过PyCharm,但其中一些可以通过其他方式完成。但是,由于这是关于PyCharm中的调试,这就是我用于指令的内容。另外,我正在使用Windows。

将Fabric软件包安装到项目环境中(使用Settings - > Project Interpreter软件包安装)。这会将Fabric安装到虚拟环境的站点包文件夹中,并将fab.exe和fab-script.py文件放在/ Scripts文件夹中。找到fab-scripts.py文件的位置并复制路径(类似于“C:\\ Scripts \ fab-script.py”)

现在,使用此脚本文件名创建运行配置(运行 - >编辑配置... - > Python)。 Script参数指向fabfile.py和执行/调试的命令。 Script参数是:-f fabfile dev:“MyBranch1”deploy这允许我使用“MyBranch1”参数调试“dev”任务,然后运行“deploy”任务。用您的任务名称替换dev:“MyBranch1”部署。工作目录指向您的项目文件夹,该文件夹也是fabfile.py所在的位置(至少在我的配置中)。我的设置看起来像这样 RunDebug Configuration

打开fabfile.py并在您想要停止调试器的地方放置一个断点。在这种情况下,由于我正在调试部署任务,我将断点放在那里。 enter image description here

现在要调试fab运行,将活动配置设置为刚刚创建的配置,然后单击debug。 enter image description here

当断点被击中时,您将关闭并使用PyCharm调试您的结构fabfile.py

当您准备好运行调试的fabfile时,打开终端并使用调试中使用的参数运行fab命令。再次,将命令提示符指向项目(工作)目录。 (注意:Scripts文件夹中的fab.exe需要从命令行执行 - 通过将其置于环境变量path属性中) enter image description here

答案 1 :(得分:2)

我按照屏幕截图中的上述说明操作。请注意,上面的fab脚本应包含:

import fabric.main

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

答案 2 :(得分: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())

ie:它真正做的就是调用fabric.main.main()。我不确定为什么它会在sys.argv[0]中修改Windows扩展名,但这并不重要。

如果要调试fabfile,只需将fab.py文件设置为IDE要调试的脚本,或者创建一个调用fabric main()的小存根文件并进行调试。然后,您可以像在任何其他python程序中一样,在fabfile中的任何位置放置断点(或者您的fabfile导入的任何内容)。

除此之外,您需要的主要部分是能够将参数传递给已执行的脚本,以便它们显示在sys.argv中。如何执行此操作取决于您的IDE /调试器。或者,你可以把它们塞进自己,就像这样:

import sys
from fabric.main import main

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

当然,使用IDE /调试器方法要好得多。

答案 3 :(得分:0)

对于fabric2(2.5),将这些代码添加到fabfile.py并将其作为python脚本进行调试:

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