matplotlib - 使用 PyCharm 和 Docker 解释器进行 X11 转发

标签 matplotlib docker pycharm x11

我正在使用 Docker 解释器在 PyCharm 中开发一个项目,但是在做大多数“交互式”事情时遇到了问题。例如,

import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [4, 5, 6])

给予

RuntimeError: Invalid DISPLAY variable

我可以绕过这个使用

import matplotlib
matplotlib.use('agg')

它消除了错误,但是当我执行 plt.show() 时没有产生任何情节。我也得到与线程 [pycharm remote python console]: "cannot connect to X server" error with import pandas 中相同的错误在导入 Pandas 后尝试调试时,但我无法将 SSH 连接到我的 docker 容器中,因此那里提出的解决方案不起作用。我已经看到将“-e DISPLAY=$DISPLAY”传递给“docker run”命令的解决方案,但我不相信 PyCharm 具有使用 Docker 解释器指定这样的命令行参数的任何功能。有没有办法设置某种永久的、通用的 X11 转发(如果这确实是根本原因),以便将这些图适本地传递给我本地机器上的 DISPLAY?更一般地说,有没有人在 PyCharm 中成功使用 matplotlib 和 Docker 解释器?

最佳答案

这里是 the solution我想出了。我希望这对其他人有帮助。步骤如下:

  1. 安装并运行 Socat

    socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"

  2. 安装并运行 XQuartz(可能已经安装)

  3. 为您的项目编辑 PyCharm 运行/调试配置,为 DISPLAY 变量设置适当的地址(在我的例子中是 192.168.0.6:0)

运行/调试项目会导致一个新的 quartz 弹出窗口显示绘制的图形,无需保存到图像等。

关于matplotlib - 使用 PyCharm 和 Docker 解释器进行 X11 转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39155157/

相关文章:

python - 如何在图表上指示线的起点?

python - 如何让 FigureCanvasTkAgg 与 Scrollbar 一起工作

python - 对绘图中的拟合设置限制

python - 编译 Cython 扩展错误 - Pycharm IDE

python - 如何使用我在代码中使用的所有包将 myfile.py 编译为 myfile.exe?

matplotlib - 绘制逻辑回归的决策边界

node.js - 我在本地 nodejs 应用程序上运行 redis(docker image)

docker - 如果未在docker run -v中指定host-src,则为什么

python - 子进程在 docker 容器中不起作用

python - PyCharm 警告 "End of statement expected"类型提示内部