β

使用 PyCharm 远程调试 Django 程序

onlyice 848 阅读

这阵子组内流行使用 Django 写管理端程序。大家习惯了在 Windows 上使用 PyCharm 等 IDE 快速方便地进行开发,但是由于管理端使用了一些公司的公共组件,而这些组件又只提供了 Linux 上的 Python 接口,因此必须在 Linux 上运行 Django 程序。值得庆幸的是,大多数的 IDE 都提供了远程调试功能, PyCharm 也可以经过简单配置进行远程调试。

场景

  1. 一台装有 PyCharm (这里使用的是 PyCharm 3.4) 的 Windows / Mac 机器
  2. 一台装有 Python 2.7 的 Linux 机器,可以与 Windows 机器相互通信,将会用来执行 Django 程序

配置远程 Python 解释器

  1. 在 PyCharm 中打开 Python 解释器的设置面板,路径为 File => Settings (Ctrl+Alt+S) => Python Interpreter:

  2. 点击右上角齿轮,Add Remote,填写 SSH 相关的设置

  3. 点击 OK

第 3 步做完后可能需要等一些时间。这个过程中 PyCharm 会将一些工具和调试 Server 发到你配置的 .pycharm_helper 目录中,并且对机器上已经安装的库类生成 skeletons,并传回 Windows 上进行保存。 Python skeletons 是一些包括库类 API 定义的文件,用来给 PyCharm 做代码静态分析。JetBrains 的帮助文档提供了更详细的 说明 ,参见 Important Note 一节。

最后 ,你需要在解释器设置面板,选中 Remote Interpreter 做为项目的默认解释器。

配置部署信息

在 PyCharm 中打开部署的设置面板,路径为 Tool => Deployment => Configuration。

这里的填写内容基本跟配置 Python 解释器一处类似。Type 建议选择 SFTP,常见的 OpenSSH Server 提供了这种协议的支持。

第二个 Tab (Mappings) 需要填写部署的路径,注意这个路径对应你项目的根目录,所以你很可能需要为它建一个空文件夹。勾选上 “Use this server as default”。除此之外还有个 Web path 的设置,应该是用来配置网页上查看文件的服务,可以无视。

配置好部署面板后,建议把自动同步开启 (Tool => Deployment => Automatics Upload(always)),这样在 PyCharm 中对文件进行修改,可以马上同步到 Linux 上。同时建议先做一次同步。同步可以通过很多方式完成,比如在 Project 面板 (Alt+1) 上对项目根目录右键 “Upload to”,也可以在菜单中上传 (Tool => Deployment => Upload to)。如果菜单中 Upload to 不可点击,请尝试打开项目的一个 py 文件,并把焦点放在编辑器中。

配置运行配置

在 PyCharm 中打开运行配置面板,路径为 Run => Run/Debug Configurations:

如果你发现你的运行配置中没有 Django 相关的项,请在项目设置的 Django 中勾选 Enable Django Support。

运行配置的设置有两点需要注意。Python Interpreter 需要选中之前建立的远程解释器。Path mappings 处,需要把本机的 manage.py 与 Linux 上的关联起来,比如:

C:/Evolution/Python/django_website/manage.py <=> /home/onlyice/work/django_website/manage.py

这可能是 PyCharm 的 bug。在使用远程解释器后,PyCharm 并不会自动将 Django 运行配置中的 manage.py 文件定位到 Linux 上的那份,而是会尝试使用下面的命令来启动 Django 调试 Server:

/usr/bin/python2 manage.py C:/Evolution/Python/django_website/manage.py

自然就找不到文件了。所以使用了 Path mappings 作为一种 hack 手段来解决。

P.S. PyCharm 提供的 Remote Debugging 指南 相对比较繁琐,并没有仔细尝试,如果你发现有更好的办法进行远程调试请告知我。

这个时候就可以打打断点试试能不能调试啦~~

Trouble Shooting

Q: 点击调试运行失败,显示 “Cant set remote tunneling”

A: 调试时 PyCharm 调用将 Python Debug Server ( pydevd.py ) 绑定在一个随机端口上,再使用 SSH 的端口转发将数据通过 SSH 端口转到 Debug Server 去。需要检查你的 sshd 配置 (默认是 /etc/ssh/sshd_config ) 是否禁用了 TCP 转发 (AllowTcpFowarding),这个配置默认是打开的。

这阵子组内流行使用 Django 写管理端程序。大家习惯了在 Windows 上使用 PyCharm 等 IDE 快速方便地进行开发,但是由于管理端使用了一些公司的公共组件,而这些组件又只提供了 Linux 上的 Python 接口,因此必须在 Linux 上运行 Django 程序。值得庆幸的是,大多数的 IDE 都提供了远程调试功能, PyCharm 也可以经过简单配置进行远程调试。

作者:onlyice
原文地址:使用 PyCharm 远程调试 Django 程序, 感谢原作者分享。

发表评论