使用PyCharm和Docker Interpreter进行X11转发

时间:2016-08-25 21:42:12

标签: matplotlib docker pycharm x11

我正在使用Docker解释器在PyCharm中开发一个项目,但是在做大多数事情时我遇到了问题" interactive"的东西。如,

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

给出

RuntimeError: Invalid DISPLAY variable

我可以使用

来规避这个问题
import matplotlib
matplotlib.use('agg')

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

2 个答案:

答案 0 :(得分:2)

这是the solution我想出来的。我希望这有助于其他人。步骤如下:

  1. 安装并运行Socat

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

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

  3. 编辑项目的PyCharm运行/调试配置,设置DISPLAY变量的适当地址(在我的情况下为192.168.0.6:0)
  4. 运行/调试项目会生成一个新的石英弹出窗口,显示绘制的图形,无需保存到图像等。

答案 1 :(得分:1)

在主机上运行xhost +并将这些选项添加到docker run-e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix