在我的开发环境中,我进行了一个雄心勃勃的项目,因为我想保持最新状态。因此,我多年来一直在使用Eclipse和PyDev进行Django项目,并且效果很好。
一段时间以来,我一直在使用Python 3.7,Django 2.1和Eclipse Photon。
我尝试了一种全新的尝试,如下所示,逐步升级为最新版本:
Copy projects into workspace
这很好。首先,我可以使用指向http://127.0.0.1:8000/的网站进行操作,并且该网站大部分都可以正常运行,实际上不能抱怨,几乎可以预期会有更多戏剧性的升级。为了达到与Django 3.0.1兼容的目的,还有些不完善的调整,但令人惊讶的是很少。
我被困在崩溃的页面上,所以我设置一个断点只是发现它不起作用...嗯。我之前曾在PyDev和其他许多人一起来过。因此,我已经执行了基本的诊断,并将分享我的知识。但是,如果有人(尤其是法比奥)有更多的智慧可以帮助他们工作,我将不胜感激。
安装在Eclipse上的是:
PyDev for Eclipse 7.4.0.201910251334 org.python.pydev.feature.feature.group Fabio Zadrozny
PyDev for Eclipse Developer Resources 7.4.0.201910251334 org.python.pydev.feature.source.feature.group Fabio Zadrozny
Pydev Mylyn Integration 0.6.0 org.python.pydev.mylyn.feature.feature.group Fabio Zadrozny
主要观察结果:
Fabio在这里留下了一些非常好的(现在是日期)提示:pydev breakpoints not working,我可以回应一下:
import sys
print('DEBUG: current trace function', sys.gettrace())
我看到以下输出:
DEBUG: current trace function None
这似乎是问题所在。某些东西正在关闭调试。
按照法比奥的第一个技巧,并考虑到自该技巧以来PyDev结构的变化,我在pydevd_constants.py
中发现了plugins/org.python.pydev.core_7.4.0.201910251334/pysrc/_pydevd_bundle
,并且可以设置:
DEBUG_TRACE_LEVEL = 3
DEBUG_TRACE_BREAKPOINTS = 3
如Fabio所建议。这揭示了一点遗憾。从本质上讲,在启动调试运行直到服务器运行之前,我会看到很多不错的跟踪。然后我看到标准输出说服务器正在运行:
System check identified no issues (0 silenced).
December 26, 2019 - 12:29:54
Django version 3.0.1, using settings 'MyProject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
它会一直停在settings.py的断点上,然后继续F8。
现在,在浏览器中,我正在加载正在调试的视图。而且控制台上的PyDev踪迹为零,实际上,我只得到了我打印的小行,将其放入视图的get_queryset()方法以确保我的代码(带有断点)正在运行。
所以这没有任何帮助。我可以在自己的views.py文件中查找与Fabio的建议有关的干草堆:
import sys
print('DEBUG: current trace function', sys.gettrace())
def trace_func(frame, event, arg):
with open('pydev-trace.txt', 'a') as f:
print('Context: ', frame.f_code.co_name, '\tFile:', frame.f_code.co_filename, '\tLine:', frame.f_lineno, '\tEvent:', event, file=f)
return trace_func
sys.settrace(trace_func)
print('DEBUG: current trace function', sys.gettrace())
在控制台上,我现在看到:
DEBUG: current trace function None
DEBUG: current trace function <function trace_func at 0x7ffaa6f18b80>
System check identified no issues (0 silenced).
December 26, 2019 - 12:42:48
Django version 3.0.1, using settings 'MyProject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
哪种看起来不错。
但是输出跟踪似乎从未停止。它不断增长,不断增长,似乎陷入了无休止的循环自动重载循环中:
Context: snapshot_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 370 Event: call
Context: snapshot_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 361 Event: line
Context: watched_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 260 Event: call
Context: watched_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 260 Event: return
Context: snapshot_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 362 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 758 Event: call
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 759 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 760 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 760 Event: return
Context: snapshot_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 364 Event: line
Context: snapshot_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 365 Event: line
Context: stat File: /usr/lib/python3.8/pathlib.py Line: 1186 Event: call
Context: stat File: /usr/lib/python3.8/pathlib.py Line: 1191 Event: line
Context: __fspath__ File: /usr/lib/python3.8/pathlib.py Line: 721 Event: call
Context: __fspath__ File: /usr/lib/python3.8/pathlib.py Line: 722 Event: line
Context: __str__ File: /usr/lib/python3.8/pathlib.py Line: 711 Event: call
Context: __str__ File: /usr/lib/python3.8/pathlib.py Line: 714 Event: line
Context: __str__ File: /usr/lib/python3.8/pathlib.py Line: 715 Event: line
Context: __str__ File: /usr/lib/python3.8/pathlib.py Line: 715 Event: return
Context: __fspath__ File: /usr/lib/python3.8/pathlib.py Line: 722 Event: return
Context: stat File: /usr/lib/python3.8/pathlib.py Line: 1191 Event: return
Context: snapshot_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 369 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 758 Event: call
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 759 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 760 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 760 Event: return
Context: snapshot_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 370 Event: line
Context: snapshot_files File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 370 Event: return
Context: tick File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 346 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 758 Event: call
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 759 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 760 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 760 Event: return
Context: __eq__ File: /usr/lib/python3.8/pathlib.py Line: 753 Event: call
Context: __eq__ File: /usr/lib/python3.8/pathlib.py Line: 754 Event: line
Context: __eq__ File: /usr/lib/python3.8/pathlib.py Line: 756 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 744 Event: call
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 747 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 748 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 748 Event: return
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 744 Event: call
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 747 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 748 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 748 Event: return
Context: __eq__ File: /usr/lib/python3.8/pathlib.py Line: 756 Event: return
Context: tick File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 347 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 758 Event: call
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 759 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 760 Event: line
Context: __hash__ File: /usr/lib/python3.8/pathlib.py Line: 760 Event: return
Context: __eq__ File: /usr/lib/python3.8/pathlib.py Line: 753 Event: call
Context: __eq__ File: /usr/lib/python3.8/pathlib.py Line: 754 Event: line
Context: __eq__ File: /usr/lib/python3.8/pathlib.py Line: 756 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 744 Event: call
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 747 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 748 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 748 Event: return
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 744 Event: call
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 747 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 748 Event: line
Context: _cparts File: /usr/lib/python3.8/pathlib.py Line: 748 Event: return
Context: __eq__ File: /usr/lib/python3.8/pathlib.py Line: 756 Event: return
Context: tick File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 348 Event: line
Context: tick File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 351 Event: line
Context: tick File: /home/me/.local/lib/python3.8/site-packages/django/utils/autoreload.py Line: 345 Event: line
这是我们迄今为止最好的线索。我怀疑这里的事情处于一个非常紧迫的无限循环中。网页仍然加载,因此它不会以惊人的速度消耗资源,并且运行了很长时间,并且不会溢出任何堆栈或任何东西,但显然似乎以某种方式损坏了。
但是在这里固定一些东西变得非常困难。
最后在回应中,Fabio建议采用暴力破解方法:
import pydevd;
pydevd.settrace()
可惜无法导入pydevd,但是如果我将其添加到外部库中,则:
...plugins/org.python.pydev.core_7.4.0.201910251334/pysrc
我可以运行它,但是会在控制台上产生无尽的文本流,并且在这种情况下我的网站不会响应。因此,在调试服务器宕机的情况下,这是蛮力的;-)。这可能与上面的无尽循环有关。
其他支票:
我检查了Fabios的需求清单:
http://www.pydev.org/manual_adv_django.html
在那些我擅长的方面。
我可以在项目属性> PyDev PYTONPATH > 字符串替换变量上看到后两个。我可以从项目上下文菜单中存在Django菜单并缺少设置为Django项目的选项中推断出第一个。
在这一点上,我希望有更多的指导。我在这里花费了大量的时间进行诊断,并试图找出原因,但是在这一点上,我的效率将因注入的专业知识和建议而飞速增长。法比奥?
我在这里问的主要是因为有许多方面,对于遇到类似问题的任何人来说,它都是非常有用的可找到的资源。而且没有理由相信这种情况是不可能的。所以我想解决这个问题,并且基本上出于我和其他人的考虑发布了一个解决方案。
答案 0 :(得分:0)
一些要检查的东西:
这两个过程不同吗?即:如果您在设置和视图中import os;print(os.getpid())
是相同的pid? (我怀疑您正在看到进行自动重新加载的主进程的日志,而不是在实际执行代码的辅助进程上的日志。)
要附加到PyDev中的子流程的设置是否打开? (即:preferences > pydev > debug > attach to subprocess automatically while debugging
)。
如果您使用--noreload
进行启动,是否可以正常工作?
答案 1 :(得分:0)
PyDev发行版7.5.0(于2020年1月10日发布)修复了此问题。我的视图中的断点再次正常运行。我的发行说明包括:
让我怀疑整个问题都与Python 3.8有关(考虑到python 3.8的最新发行版,这并不令人惊讶),尽管pydevd 1.9.0中的调整可能起到了作用。无论哪种方式,将PyDev更新到7.5.0均可解决该问题!