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

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

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远程python控制台]:无法连接到X服务器“导入pandas时尝试debugging导入pandas错误,但我不能SSH到我的docker容器,所以解决scheme提出了那里不起作用。 我已经看到了在“docker run”命令中传递“-e DISPLAY = $ DISPLAY”的解决scheme,但是我不相信PyCharm有任何用Docker解释器指定命令行参数的function。 有没有办法设置一些永久的,通用的X11转发(如果这确实是根本原因),以便这些图将被适当地传递给本地机器上的DISPLAY? 更普遍的是,有没有人在PyCharm中使用了带有Docker解释器的matplotlib?

这是我提出的解决scheme 。 我希望这可以帮助别人。 步骤如下:

  1. 安装并运行Socat

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

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

  3. 编辑你的项目的PyCharm运行/debuggingconfiguration,为DISPLAYvariables设置合适的地址(在我的情况下是192.168.0.6:0)

运行/debugging项目会生成一个新的石英popup窗口,显示绘制的graphics,而不需要保存到图像等。

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