我正在使用 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我想出了。我希望这对其他人有帮助。步骤如下:
安装并运行 Socat
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
安装并运行 XQuartz(可能已经安装)
- 为您的项目编辑 PyCharm 运行/调试配置,为 DISPLAY 变量设置适当的地址(在我的例子中是 192.168.0.6:0)
运行/调试项目会导致一个新的 quartz 弹出窗口显示绘制的图形,无需保存到图像等。
关于matplotlib - 使用 PyCharm 和 Docker 解释器进行 X11 转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39155157/