【发布时间】:2019-06-03 17:42:00
【问题描述】:
我有一个在 Docker-compose 配置中运行的 Django 应用程序,我希望能够从 Pycharm 交互式地调试它。我第一次尝试使用 Pycharm 的内置 Docker Compose 配置进行调试,但失败了(结果:应用程序运行并且可以访问,但调试不可用,我怀疑是因为 a known bug where the debugger fails to connect if the entrypoint script takes too long to return)。我现在正在尝试使用 pydevd 进行远程调试来设置调试,大致遵循instructions contained here 并总结如下:
- 在 Pycharm 中添加 Python 远程调试器运行配置
-
在我的 Django 应用程序中,将
pycharm-debug-py3k.egg复制到根目录,将其添加到路径中,导入 pydevd 并在我的应用程序代码中对其进行初始化,如下所示:import sys sys.path.append("pycharm-debug-py3k.egg") import pydevd pydevd.settrace('ip.address.of.my.machine', port=4444) 在 Pycharm 中启动调试器
- 使用
docker-compose up启动我的应用程序 - 按调试器中的播放/恢复程序按钮
这样做的结果是,在 Pycharm 中,调试器控制台报告连接处于活动状态(“已连接到 pydev 调试器”)。调试器选项卡显示了我将代码 sn-p 添加到的文件中存在的预期变量和值。我的 Django 应用程序的容器日志中没有出现任何错误,并且日志显示了正常 Django 启动的预期输出。但是,无法从 Web 浏览器访问我的应用程序,并且尝试在容器中运行单元测试会挂起而没有响应。键盘中断单元测试后,我在底部收到一条带有此消息的堆栈跟踪:
File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 1392, in _locked_settrace
time.sleep(0.1) # busy wait until we receive run command
KeyboardInterrupt
我已经删除了所有断点,删除了.idea,重新启动了Pycharm,重新启动了Docker,并确认如果我删除了pydevd 代码,sn -p 所有单元测试和Web 服务器都按预期运行。
【问题讨论】:
标签: python django docker pycharm