[英]How do you set up Pycharm to debug a Fabric fabfile on Windows?
是否可以设置 Pycharm 以单步执行 Fabric fabfile.py?
使用运行/调试配置编辑器似乎可以做到这一点,但我似乎无法正确设置设置。 编辑器要求运行一个脚本,我已经尝试了 fab-script.py 文件,它只是给了我 fab 帮助选项。
好像我很接近但不完全在那里。
这是我最终设置它的方式,以防这对其他人有用。 与大多数类似的事情一样,一旦您了解了魔法设置,就很容易了。 所有这些指令都是通过 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 和要执行/调试的命令。 脚本参数是: -f fabfile dev:"MyBranch1" deploy 这允许我使用“MyBranch1”参数调试“dev”任务,然后运行“deploy”任务。 将 dev:"MyBranch1" deploy 替换为您的任务名称。 工作目录指向您的项目文件夹,这也是 fabfile.py 所在的位置(至少在我的配置中)。 我的设置看起来像这样。
打开 fabfile.py 并在要停止调试器的位置放置一个断点。 在这种情况下,因为我正在调试部署任务,所以我将断点放在那里。
现在要调试 fab 运行,将活动配置设置为刚刚创建的配置,然后单击调试。
当断点被击中时,您将关闭并使用 PyCharm 调试您的结构 fabfile.py
当您准备好运行调试的 fabfile 时,打开终端并使用调试中使用的参数运行 fab 命令。 再次将命令提示符指向项目(工作)目录。 (注意:Scripts 文件夹中的 fab.exe 需要可以从命令行执行——通过将它放在环境变量路径属性中)
我按照屏幕截图中的上述说明进行操作。 请注意,上面的 fab-script 应包含:
import fabric.main
if __name__ == '__main__':
fabric.main.main()
fab
可执行文件只不过是一个简单的 python 脚本。 例如,对于 Fabric 1.10.2,它就是这样(尽管我跳过了shebang 和 encoding 行):
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(或 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/调试器方法要好得多。
对于 fabric2(2.5) 将这些代码添加到 fabfile.py 并将其作为 python 脚本进行调试:
if __name__ == '__main__':
from fabric.main import make_program
make_program().run("fab [your_task]"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.