Pycharm Remote Debug 远程调试 matplotlib plt.show 不显示图像 SciView显示图像


import matplotlib

import matplotlib.pyplot as plt

matplotlib是很高效的可视化工具包,pycharm的SciView模式可以缓存上一次plot的图像,因此能够同时显示多张图像,如下图1所示,相较于跳出独立窗口的显示方式,

 

图1

 

 

SciView更灵活。SciView的配置方式为图2所示:

 

图2

 

 

 

==============================================================================================================================

 

 

 

 

 

Pycharm运行本地解释器,检查matplotlib.get_backend(),

>>matplotlib.get_backend()
'module://backend_interagg'

backend_interagg就能很好地兼容pycharm的SciView,

plt.show() 后可以SciView可以正常显示图像,如图1,然而运行远程解释器(Remote Server Debug)时,会遇到问题。例如

----------------------------------------------------------------------------------------------------------------------------------------------

问题1:

>>plt.show()
Error: failed to send plot to http://127.0.0.1:63342
Traceback (most recent call last):
File "/lustre/home/dlyu/.app/Python-3.6.4rc1/lib/python3.6/urllib/request.py", line 1318, in do_open
........
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/lustre/home/dlyu/.pycharm_helpers/pycharm_display/datalore/display/display_.py", line 60, in _send_display_message
urlopen(url, buffer)
urllib.error.URLError: <urlopen error [Errno 111] Connection refused>

.....

----------------------------------------------------------------------------------------------------------------------------------------------

问题2:或者压根不报错,就是不显示图像。我把Pycharm重装最新版本后,不出现问题2,而是变为问题1了。

----------------------------------------------------------------------------------------------------------------------------------------------

 

在“http://127.0.0.1:63342”中的63342是环境变量os.environ['PYCHARM_DISPLAY_PORT']或者os.getenv("PYCHARM_MATPLOTLIB_PORT")。 远程解释器尝试将图像数据发送到 远程服务器的127.0.0.1 : 63342 ,然而Connection refused。SciView的运行机制是:本地笔记本的Pycharm会侦听127.0.0.1:63342 ,远程解释器会将图像数据发送到127.0.0.1 : 63342,因此在Pycharm收到图像数据后,会在SciView中显示。

为了解决以上Connection refused问题,ssh远程端口转发可以建立起远程server127.0.0.1 : 63342 和 本机笔记本127.0.0.1:63342 之间的channel。

在本地笔记本上运行 ssh -R 63342:127.0.0.1:63342 user@serverIP , 在运行plt.plot() 以及 plt.show() ,SciView能够显示图像。

 

 

解决方法参考https://youtrack.jetbrains.com/issue/PY-27489


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM