我在我的本地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)机器上。如果是这种情况,我该如何让它们保持同步。我希望能够在远程计算机上使用我的代码库进行开发。我是否需要将每个更改复制到本地计算机?感觉我错过了部分难题,而且我发现的文档不够详细,无法实现。
请告诉我实施远程调试的未完成步骤以及对我的工作流程的任何影响(例如必须将所有更改复制到两个文件系统)。
答案 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
安装注意事项
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项目。要运行
运行命令
客户
我正在使用私有共享密钥,并在本地终端中输入以下内容
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}')
希望这对某人有用...