如何在IntelliJ中调试Python容器?

10

docker插件有一个调试端口,用于连接到容器enter image description here

我有一个Python应用程序,但根据文档,调试端口仅支持Java。

如何在Intellij中设置断点并调试我的Python容器?有没有办法让Python容器连接到Intellij Python调试器?

编辑:我正在运行Windows 10,使用Windows的docker,并且容器是Linux。也许我需要手动设置某种远程调试来进行Intellij Python调试器?还有,我必须拥有专业版才能进行远程调试吗?或者是否有使用社区版的解决方法?


你使用的是哪个主机操作系统? - Tarun Lalwani
Windows是我的操作系统,容器是Linux。 - red888
1个回答

10

您可以使用Python远程调试来实现。打开配置窗口,然后单击+ -> Python Remote Debug

Python Debugger Option

然后,您可以设置端口或将其保留为空白,以便Pycharm找到一个可用的端口。

Python Remote Debug

然后点击调试图标启动调试服务器,它将显示下面这种消息。
Starting debug server at port 57588
Use the following code to connect to the debugger:
import pydevd
pydevd.settrace('localhost', port=57588, stdoutToServer=True, stderrToServer=True)
Waiting for process connection...

现在你需要在Docker内设置pydev调试。为此,您需要使用pycharm-debug-py3k.egg。对我来说,我将其复制到当前的Dockerfile文件夹中,如下所示。
cp "/Users/tarun.lalwani/Library/Application Support/IntelliJIdea2017.2/python/pycharm-debug-py3k.egg" .

根据已安装的IntelliJ版本,您的位置将会改变。之后,我们需要编辑我们的Dockerfile。

FROM python:3.6
WORKDIR /app
ENV PYTHONPATH=/app:/app/debug
COPY pycharm-debug-py3k.egg /app/debug
COPY debug_test.py /app/
CMD python debug_test.py

构建 debug_test.py 后,其顶部将有以下行:

import pydevd
pydevd.settrace('docker.for.mac.localhost', port=55507, stdoutToServer=True, stderrToServer=True)

注意:我使用了docker.for.mac.localhost,因为我使用的是Docker for Mac,但如果使用Docker for Windows,则使用docker.for.win.localhost。对于工具箱或Linux,您将添加您机器的IP地址。
由于它是Docker,我们可能希望保持端口固定,而不是像我这样动态。现在我们构建Docker文件并运行它。
这将在Pycharm中打开一个弹出窗口,请单击自动检测以检测源映射。

Auto detect

然后你的代码将在文件的主要行处设置断点

Debug Local Execution Remote


有没有第三方插件或其他方法可以做到这一点,而不需要专业知识或其他的解决办法? - red888
1
我不确定 PyCharm 是否有类似的功能,但可能在该领域进行了广泛研究的人会知道。另一个选择是选择具有 Python 远程调试功能的 PyDev Eclipse 或 Visual Studio Code。 - Tarun Lalwani
1
pycharm-debug.egg适用于Python版本2及以下。 - Michael M
2
对于无法找到Pycharm egg的Ultimate Edition用户:Python调试器可在PyPi中获得,因此可以使用pip进行安装以进行远程调试。当调试运行在另一台计算机上的进程时,可以通过pip安装pydevd而不是从PyCharm安装目录下的debug-eggs目录复制文件。 - Michael M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接