不清楚远程调试(Eclipse Pydev)使用的是哪个Python版本

3 投票
3 回答
715 浏览
提问于 2025-04-18 16:59

以下这些指南对我在本地机器上设置Eclipse Pydev和在虚拟机上进行远程调试帮助很大:

http://pydev.org/manual_adv_remote_debugger.html

http://brianfisher.name/content/remote-debugging-python-eclipse-and-pydev

如果我理解得没错,我正在调试的应用程序必须在远程主机上启动。所以,这个应用程序使用的是远程的Python版本。

现在,在调用pydevd.settrace()之后,Eclipse(本地主机)告诉我,它在堆栈跟踪中使用的是本地的Python文件。这是因为pydevd_file_utils.py中的路径映射(PATHS_FROM_ECLIPSE_TO_PYTHON)吗?因为有些文件不在这些映射范围内(比如线程相关的文件)。

想象一下这样的情况:我在一个类似生产环境的虚拟机上调试我的应用程序(使用Python 2.4),但我的Eclipse是在一个更新的开发机器上(默认使用Python 2.7)。那么,这个应用程序是会在远程的2.4 Python下运行,还是在本地的2.7 Python下运行呢?

3 个回答

0

如果你在使用代码,但不确定它是版本2还是版本3,你可以使用下面的代码来检查。

import sys
try:
    print sys.version
except:
    print(sys.version)
0
python -V

Python 2.7.5+

这里有两种方法可以查看当前的Python版本。

第一种:通过代码:

python -c 'import sys; print sys.version'

2.7.5+ (default, Feb 27 2014, 19:37:08) 
[GCC 4.8.1]

第二种:通过直接命令:

第三种:通过主机名:

print socket.gethostname()
1

我找到了答案。
我需要测试一下这个远程调试的方法。

让我来解释一下我是怎么发现的:

我有一个本地系统,使用的是Python 2.6.5。
然后我创建了一个新的远程系统(在这个例子中是虚拟机),使用的是Python 2.7.3。
接着我共享了以下脚本:

import pydevd
print 'hello world'

# call debugger server to handle this breakpoint
pydevd.settrace('10.31.94.156', stdoutToServer=True, stderrToServer=True)

# fron now on the host (debugger server) has control over breakpoints,
# variables, stepping through code etc.
print 'hi again'
import sys
print sys.version  # 2.7.3 (default, Sep 26 2013, 20:08:41)
                   # [GCC 4.6.3]

# now use a 2.7 feature: 
x = {i : chr(65+i) for i in range(4)}  # dict comprehension
print x  # {0: 'A', 1: 'B', 2: 'C', 3: 'D'}

import socket
print socket.gethostname()  # my virtual machine name

print 'done'

当然,我在我的主机上使用Eclipse添加了一些断点。看到本地解释器对列表推导式报错真有趣,尽管它确实能运行。而且在调试器的变量面板中,变量x也显示得很好。

结论:远程解释器用于运行/评估代码。
调试服务器可以帮助你添加

撰写回答