在Eclipse中远程调试Python

时间:2017-07-31 11:44:59

标签: python eclipse pydev remote-debugging

我在我的本地Windows机器上安装了带有Pydev和RSE的Eclipse。我想远程调试托管在Ubuntu 16.04 VPS上的Python应用程序(Odoo 9.0)。我在远程计算机上安装了Pydev。我已经能够通过SSH使用密钥进行身份验证连接到远程计算机,我可以浏览远程文件系统。

参考此处的文件; http://www.pydev.org/manual_adv_remote_debugger.html 并阅读位于的文件中的评论; /usr/local/lib/python2.7/dist-packages/pydevd_file_utils.py 我似乎需要将远程映射到本地文件系统。对我而言,这意味着代码必须存在于远程和本地(Eclipse)机器上。如果是这种情况,我该如何让它们保持同步。我希望能够在远程计算机上使用我的代码库进行开发。我是否需要将每个更改复制到本地计算机?感觉我错过了部分难题,而且我发现的文档不够详细,无法实现。

请告诉我实施远程调试的未完成步骤以及对我的工作流程的任何影响(例如必须将所有更改复制到两个文件系统)。

2 个答案:

答案 0 :(得分:1)

如果你想远程(而不是本地)开发代码,我的建议是使用sshfs(因此,你可以直接在那里进行所有更改)。

在这种情况下,您甚至应该能够为远程解释器创建一个shell脚本(即:解释器可能是任何脚本,因此,您可以通过ssh对其进行chroot甚至运行一些python)。

注意我实际上没有测试过这个,但理论上它应该可以工作;)

答案 1 :(得分:0)

我找到了一种方法,可以使用eclipse和pydev从我的Mac到Debian linux服务器(bitnami设置)进行远程编辑和远程调试。

要设置远程编辑和调试-请先阅读这些内容

https://www.pydev.org/manual_adv_remote_debugger.html https://sites.google.com/site/programmersnotebook/remote-development-of-python-scripts-on-raspberry-pi-with-eclipse

安装注意事项

  • 在服务器python环境中安装了pydevd(不需要复制pysrc,如上面的raspy示例中所述)。有关安装步骤,请参见上面的链接。
  • 使用RSE创建的远程项目。 (Eclipse远程Shell扩展)使用RSE“远程Shell”窗口,您可以右键单击源目录并创建一个指向服务器文件的本地Eclipse项目。有关安装步骤,请参见上面的链接。
  • 在服务器pydevd安装目录中编辑了pydevd_file_utils.py。对我来说,这是/opt/python/lib/python3.7/site-packages。如果不确定这是哪里,请在服务器python环境import pydevd; print(pydevd.__file__)中输入以下内容。添加了PATHS_FROM_ECLIPSE_TO_PYTHON = [('/Users/<myusername>/dev/test/RemoteSystemsTempFiles/<server ref in RSE>/opt/bitnami/apps/odoo/data/addons/13.0/test/test.py','/opt/bitnami/apps/odoo/data/addons/13.0/test/test.py')]。阅读评论并将其放在示例下方下方。
  • 可以添加以下内容而不是PATHS_FROM_ECLIPSE_TO_PYTHON = [(r'/Users/andrewlemay/esp/test/RemoteSystemsTempFiles/34.253.144.28/',r'/')],这意味着它将适用于服务器上的所有RSE项目。
  • 请注意,RemoteSystemTempFiles目录是本地计算机上Eclipse RSE路径的一部分
  • 添加SSH远程端口转发隧道。这会将数据从服务器上的端口5678转发到客户端localhost:5678,以允许服务器远程调试器将信息发送到侦听客户端调试器-请参见下面的命令。这样,我不需要在settrace()命令中使用IP地址,也不需要配置路由器以将其端口转发到本地计算机。
  • 此处https://www.ssh.com/ssh/tunneling/example的SSH隧道上的信息

要运行

  • 在5678上通过远程端口转发设置到服务器的安全SSH隧道
  • 通过控制台或RSE Remote Shell在服务器上运行python脚本(Eclipse> Windowother>远程系统> Remote Shell

运行命令

客户

我正在使用私有共享密钥,并在本地终端中输入以下内容 ssh -t -i "/Users/<username>/keys/<serverkeyname>.pem" <serverusername>@<serverIP> -R 5678:localhost:5678 -C -N 该过程将阻止终端。完成调试以关闭隧道时,请使用CTRL-C结束进程。如果您不需要私钥,则可以丢掉-t -i "/Users/<username>/keys/<serverkeyname>.pem"部分。

通过单击PyDev:start the pydev server按钮(必须具有调试功能)在Eclipse中启动Pydev服务器。 PyDev:start the pydev server

然后您应该在控制台中收到一条消息,提示Debug Server at port: 5678

服务器

您可以使用服务器终端或Eclipse RSE Remote Shell窗口 Python3 test.py

本地Eclipse调试服务器应该可以使用了!并允许调试和断点等。

测试代码-test.py

import os
import sys
import pydevd
pydevd.settrace() 

i = 3
p = 'Hello!' * i
print(p)

if __name__ == '__main__':
    pass
print("Hello world 4")
for k, v in os.environ.items():
    print(f'{k}={v}')

希望这对某人有用...