PyCharm使用远程Python解释器并用matplotlib绘图的方法

前面是我的探索过程,可以直接翻到最后看完整的正确步骤!

前言

最近在服务器上跑深度学习的代码,PyCharm配置好远程的解释器以后,部署运行debug都很完美,再也不用GitHub中转了。但是有个问题,我想用matplotlib绘图,但是发现远程的服务器并不能把图形界面传回来,这怎么办呢?其实想想,之前用ssh连接服务器,也不能用gedit之类的东西,因为terminal里面不能有GUI啊。

X11Forwarding

经过一番搜索,发现一个ssh的功能,X11 Forwarding,这个功能就是可以把图形界面给传回来,具体怎么回事如果感兴趣可以自己去搜一搜,这里就不赘述了。

环境介绍

我自己使用的是一台MacBook配PyCharm:

PyCharm 2017.2.4
Build #PY-172.4343.24, built on October 20, 2017
JRE: 1.8.0_152-release-915-b12 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.13.1

远程(局域网)服务器操作系统Linux Mint,可以理解为ubuntu:

System Info

开始配置

1. 配置远程服务器

需要在远程服务器上安装好xorg;
sudo apt install xorg
之后在/etc/ssh/sshd_config中打开X11Forwarding;
sudo vim /etc/ssh/sshd_config

sshd_config

把X11Forwarding设置成yes,如上图,保存退出。
重启远程服务器的ssh服务,使配置生效;
sudo /etc/init.d/ssh restart
这样服务器端就配置完了。

2.配置自己的电脑

由于macOS在新版中去掉了x11的支持,Mac 不再随附 X11,但 XQuartz 项目会提供 X11 服务器和客户端库。所以我们只要安装一下XQuartz就好了。https://support.apple.com/zh-cn/HT201341
安装好XQuartz以后,把自己电脑的X11Forwarding打开;
sudo vim /private/etc/ssh/sshd_config

sshd_config

把X11Forwarding设置成yes,如上图所示,保存退出。
如果你用的是windows,可以搜索一下XMing,可以提供相同的功能。
重启电脑使其生效。

测试一下

使用ssh登录远程服务器并开启X服务,只需要在ssh后面加上-X的参数就行了,在自己电脑的terminal输入:
ssh -X username@host
试试有没有成功:
gedit

gedit

我们在自己的电脑上成功显示了一个来自远程服务器的窗口!那么说明我们已经成功配置了。

PyCharm配置

接下来,我们就可以配置PyCharm了。
写一段简单的matplotlib画图的python代码:

import matplotlib.pyplot as plt

x = range(10)
y = range(10)
plt.plot(x, y)
plt.show()

我们尝试使用远程解释器运行一下,点击pycharm的运行按钮,发现报错了:
_tkinter.TclError: no display name and no $DISPLAY environment variable
提示我们没有DISPLAY这个环境变量。
经过我的一番搜索,DISPLAY的设置方法如下:
首先,在自己的电脑上打开终端,使用带X转发的ssh登陆远程服务器:
ssh -X username@host
登陆之后,输入echo $DISPLAY查看环境变量DISPLAY的值,我这里是localhost:11.0,每个电脑的值会不一样,不过一般是localhost:10.0,把这个值复制下来,添加到PyCharm中;
Pycharm->Preferences->Build, Execution, Deployment->Console->Python Console,点击Environment variables后面的...,添加我们刚刚看到的DISPLAY变量,如图所示:

Environment variables

好了,我们再试一下运行之前的代码:
_tkinter.TclError: no display name and no $DISPLAY environment variable
卧槽,为什么还是说没有DISPLAY环境变量啊!
又是一番搜索,原来在run configuration里面还要设置一遍:
点击运行按钮左边的下拉三角形->edit configurations ;
选中我们运行的configuration,我这里是test,点右边的Environment variables的...添加一个DISPLAY变量,我这里是localhost:11.0
configuration

OK,我们再来运行试试:
_tkinter.TclError: couldn't connect to display "localhost:11.0"
好吧,还是报错了,无法连接显示"localhost:11.0"。虽然报错,但是错误变了,终究是一个好事,起码说明我们环境变量设置成功了。
经过一番尝试,解决办法是要开着ssh -X的终端,才能接收到服务器发来的图形界面。

完整步骤

所以正确的流程是怎么样的呢:

  1. 自己电脑上ssh -X登陆远程服务器:
    ssh -X username@host
  2. 查看远程服务器DISPLAY环境变量的值:
    echo $DISPLAY
    echo $DISPLAY
  3. 保持开着ssh -X的终端运行,修改PyCharm的run configuration,增加环境变量与第二步中的DISPLAY值一致:


    PyCharm configuration
  4. 保持开着ssh -X的终端运行,运行我们的Python代码。

好了,看看我们千辛万苦画出来的图吧!


Figure 1

这张图是在远程服务器上画出来,然后通过X协议将图形界面转发回来的结果,还是很棒的。

总结

PyCharm无疑是开发神器,远程解释器和部署都非常方便。但是它没有内建X11转发的支持,导致了最后那个大坑,在需要使用matplotlib等画图的时候,配置了DISPLAY环境变量但是没法连接显示,需要借助终端,一直开着ssh -X的连接才能完成界面显示。顺便吐槽一下,其实在run configuration里面设置了DISPLAY环境变量就OK了,在Python Console里面设置的应该是别的地方用的环境变量,并不是我们运行Python脚本的环境变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容