使用 PyCharm 进行远程调试
使用 PyCharm,您可以通过位于其他计算机上的解释器调试您的应用程序,例如在 Web 服务器或专用测试机器上。
PyCharm 提供两种远程调试方式:
场景: 使用此方法可以利用远程机器上可用的扩展调试功能。
要求: 从本地机器到远程服务器的 SSH 访问。
使用 Python 远程调试服务器配置。
场景: 使用此方法将调试过程集成到远程服务器上的一系列运行进程中。 当您无法明确运行应用程序进行调试或需要进行一些准备工作时,这可能会有所帮助。
要求: 从本地机器到远程服务器的 SSH 访问,以及从远程服务器到本地机器的任何预定义端口的访问。
开始之前
完成以下准备任务:
在本地机器上,创建一个纯 Python 项目,如 创建一个 Python 项目 部分所述。
向该项目添加一个 Python 文件(Alt+Insert - Python 文件)。
请将以下代码添加到 Python 文件:
import math class Solver: def demo(self, a, b, c): d = b ** 2 - 4 * a * c if d > 0: disc = math.sqrt(d) root1 = (-b + disc) / (2 * a) root2 = (-b - disc) / (2 * a) return root1, root2 elif d == 0: return -b / (2 * a) else: return "This equation has no roots" if __name__ == '__main__': solver = Solver() while True: a = int(input("a: ")) b = int(input("b: ")) c = int(input("c: ")) result = solver.demo(a, b, c) print(result)
为远程解释器创建部署配置
在此示例中,运行您的应用程序的机器被称为 local ,而具有远程解释器的机器被称为 remote。
配置远程解释器
确保您可以通过 SSH 访问远程机器。
按照 使用 SSH 配置解释器 中的描述,为项目添加一个新的远程解释器,并指定连接到远程机器的凭据。
一旦为您的项目创建了远程解释器,相应的部署配置也会被创建。 要预览它,请按 Ctrl+Alt+S 打开本地机器上的 设置 对话窗口,然后转到 。
您可以接受所有默认设置,或者根据需要进行更改。 在此示例中,我们将使用 MySFTPConnection 作为部署配置的名称。
确保 根路径 值反映了在创建的 SSH 解释器的相应设置中指定的路径。
按 Ctrl+Alt+S 打开设置并转到 全部显示… ,然后点击
。 展开可用解释器列表,选择。 所选解释器的现有路径会显示在 解释器路径 对话框中。
现在,您的部署配置已准备就绪。
将您的应用程序部署到远程主机
接下来,您的应用程序应部署到远程主机。
在
菜单中,选择 。文件传输 工具窗口出现。 验证传输文件的数量。
调试您的应用程序
右键点击编辑器背景并选择
(此处为 )。查看调试输出。 请注意,调试实际上是在指定的远程服务器上进行的。
使用 Python 远程调试服务器配置进行远程调试
您还可以使用专用的运行/调试配置启用远程调试,即 运行/调试配置:Python 调试服务器。
创建运行/调试配置
转到 运行/调试配置对话框 打开。 点击工具栏上的
,,并从可用配置列表中选择 Python 调试服务器。
输入此运行/调试配置的名称——设为 MyRemoteServer。 指定 IDE 运行的机器的 端口 编号(此处为 12345 )和 IDE 主机名 (此处为 192.168.106.73)。 这些参数将由远程调试服务器用于访问。
请点击
在 路径映射 字段中。 将本地机器上的路径映射到远程机器上的路径:
检查 更新脚本 指令。 您可以使用 PyCharm 安装中的 pydevd-pycharm.egg ( <PyCharm directory>/debug-egg/pydevd-pycharm.egg )或使用 pip 安装
pydevd-pycharm
包。根据您的选择,执行以下更改:
通过运行以下命令在远程机器上安装
pydevd-pycharm
包:pip install pydevd-pycharm~=<version of PyCharm on the local machine>
例如,
pip install pydevd-pycharm~=242.20224.428)
按如下所示修改源代码文件:
import math #==============this code added==================================================================: import pydevd_pycharm pydevd_pycharm.settrace('192.168.106.73', port=12345, stdoutToServer=True, stderrToServer=True) #================================================================================================ class Solver: def demo(self, a, b, c): d = b ** 2 - 4 * a * c if d > 0: disc = math.sqrt(d) root1 = (-b + disc) / (2 * a) root2 = (-b - disc) / (2 * a) return root1, root2 elif d == 0: return -b / (2 * a) else: return "This equation has no roots" if __name__ == '__main__': solver = Solver() while True: a = int(input("a: ")) b = int(input("b: ")) c = int(input("c: ")) result = solver.demo(a, b, c) print(result)按如下所示修改代码:
import math #==============this code added==================================================================: import sys sys.path.append("<PyCharm directory>/debug-egg/pydevd-pycharm.egg") import pydevd_pycharm pydevd_pycharm.settrace('172.20.208.95', port=12345, stdoutToServer=True, stderrToServer=True) #================================================================================================ class Solver: def demo(self, a, b, c): d = b ** 2 - 4 * a * c if d > 0: disc = math.sqrt(d) root1 = (-b + disc) / (2 * a) root2 = (-b - disc) / (2 * a) return root1, root2 elif d == 0: return -b / (2 * a) else: return "This equation has no roots" if __name__ == '__main__': solver = Solver() while True: a = int(input("a: ")) b = int(input("b: ")) c = int(input("c: ")) result = solver.demo(a, b, c) print(result)
创建 SFTP 连接
在远程机器上创建一个目录,用于上传文件 quadratic_equation.py 。 您可以在终端窗口中执行此操作:
$cd /tmp $mkdir pycharm_project_986在本地机器上创建一个连接配置文件。 转到
,在打开的对话框中点击,并在 添加服务器 对话框中选择连接类型(此处为 SFTP)并输入其名称(此处为 MySFTPConnection)。
在 连接 选项卡中,指定 SFTP 主机(远程机器的地址)、用户名和该机器的密码。
请注意,指定的用户应具有对远程主机的 SSH 访问权限。
点击 映射 选项卡,并在服务器中输入部署路径。 点击浏览按钮并选择所需的文件夹 /tmp/pycharm_project_986 。 请注意,浏览按钮显示远程主机的内容。 应用更改并关闭对话框。
将文件部署到远程机器
将以下文件部署到远程机器: pydevd-pycharm.egg 和 quadratic_equation.py 。
在本地机器上的 项目工具窗口 中,选择文件,右键点击选择并选择 部署 | 上传到 MySFTPConnection。
检查 文件传输 对话窗口,以确保本地机器上的文件已上传到远程服务器。
启动调试服务器
选择创建的运行/调试配置,然后点击
:
确保 调试窗口 显示 正在等待进程连接… 消息。 此消息将显示,直到您在远程机器上启动脚本,并且该脚本将连接到调试服务器。
在远程机器上执行 Python 文件
在远程机器上,导航到 tmp/pycharm_project_986 目录。
在远程主机上启动 quadratic_equation.py 文件。 为此,请在终端窗口中输入以下命令:
$python3 quadratic_equation.py$python quadratic_equation.py此调试方法最有帮助的方面是,当远程调试是计划任务的一部分或在运行 Python 脚本之前需要执行一些准备步骤时,您可以使用任何 bash 脚本运行 Python 文件。 如果是这种情况,请将以下行添加到您的 bash 脚本的适当位置:
cd /tmp/pycharm_project_986 python3 quadratic_equation.pycd /tmp/pycharm_project_986 python quadratic_equation.py
调试您的应用程序
在您的本地机器上,切换到 调试窗口。 它将显示与 pydev 调试器的连接。
您的代码实际上是在远程主机上执行的,但在本地机器上进行调试。
摘要
为了使用远程解释器进行调试,您必须通过 PyCharm 启动程序,但这并不总是可行的。 另一方面,使用调试服务器时,您可以连接到正在运行的进程。
比较这两种方法。
在第一种情况下,我们
在第二种情况下,我们
创建了一个调试配置 (调试服务器)。
在远程机器上执行了 Python 脚本。 脚本连接到调试服务器。