使用PyCharm远程的偷懒

使用场景:

在一个小的实验室内放置了一台高性能工作站A——其中服务器的CPU配置+GTX 1080P的显卡。 但是,人经常在一间大办公室内,有自己的工位,使用一台ThinkPad笔记本B,偶尔会运行一些Python程序,或者想切换到Ubuntu下面玩一玩。

于是,就在想:我能否远程在本地ThinkPad笔记本上远程登录到时刻运行Ubuntu等操作系统的工作站上,既满足玩Ubuntu的需求,同时又能够利用其中CPU+GPU运行必要的程序呢?

“你我所遇到的问题,前人几乎都遇到过,所以,请‘站在巨人的肩膀上,看得更远’”

首先想的是,其他人应该也有这种需求吧?比如说如今这么火的云计算之类,个人申请一块AWS或者阿里云服务之类,应该就是相似的场景需求吧。经过简单搜索,确实是一个常见的问题,对看到的一系列博客资料经过实际捣腾过程进行测试与记录。 在此,非常感谢许多工程师们的辛勤总结,不再一一赘述其中的文章链接,只需要一些必要的搜索关键词,相关文章很容易找到。

为了解决这个场景问题,依次进行了如下的安装与配置:

  1. 开通A工作站的SSH;
  2. B笔记本安装了
    1. Git bash,通过Bash terminal能够正常通过命令SSH到工作站A上面来;
    2. 使用PyCharm Professional IDE能够运行远程运行本地的Python脚本;

开通A工作站的SSH

这个在Ubuntu下面安装并开通SSH服务,比较容易,不再赘述。

但需要注意的是两台电脑——工作站A与笔记本B的连接拓扑,比如两台电脑为与一台路由器下的局域网内,两台电脑位于不同的路由器下等。总之,如果两者之间的通信需要经过一层路由器,则需要对路由器进行端口映射的配置。

而在端口映射之前,尽量能够使得工作站A的IP地址是固定的,不能因为开关机问题变化。比如,当一台电脑位于一台路由器之下,一般默认情况下,路由器或电脑重启极容易导致电脑被分配的IP地址变更(一般都是192.168的IP段)。此时根据路由器的相关设置进行IP保留或固定。 其次,在路由器里面添加端口映射——也就是路由器的SSH-22端口被访问时自动映射到某个IP(也就是被访问服务器)的SSH-22端口。 所以,此时进行SSH连接,可以为 ssh username@111.111.111.111如果不是默认22端口,根据ssh的语法添加特定的端口参数即可。

笔记本的对应安装

  1. Git bash 如果这台笔记本是一台Windows,则需要安装对应的Terminal,这里推荐使用 Git bash for Windows,既有了terminal,也是一个git命令端。

    所以,当真正通过SSH进入到目标服务器上时,就几乎没有任何操作系统的隔阂,该干的活儿还是在Windows上,进入Terminal就进入了Ubuntu。说实话,在真正开了一个Ubuntu的操作系统时,大部分的交互,或者想进行的交互也都是通过terminal的方式。而这种方式恰好能够无缝过渡。

  2. 安装PyCharm Professional IDE。 说实话Sublime Text与Vim,如果用熟了习惯了,其确实够强大;但是,基本功能的实现,或者是否需要进行配置,PyCharm则不需要任何代价。相对而言,PyCharm分为Professional,Education和Community等版本,只有Professional功能最完整,其他是该版本的阉割版,但需要收费。

    但庆幸地,好在其对Students是免费的。所以,在国内的话,如果你有一个edu.cn邮箱,一切搞定。 ——话说,外国人的许多东西,尤其是软件方面确实对学生足够慷慨的;所以,如果你还在学校,且学校恰好有邮箱服务,一定要申请一个,并作为个人的主要邮箱使用,益处多多。

    废话不多说,登录该 地址 马上申请一个吧。

  3. 进行 远程 的配置, 包括两方面:

    1. 添加远程服务器的Python Interpreter
    2. Deployment设置

添加远程Python Interpreter

  1. PyCharm-File-Settings-Project-Project Interpreter-Add Remote

添加远程服务器地址,进行连接;特别注意的是,所使用的Python interpreter path,一般默认路径都是对的——这是Server 的 Ubuntu系统下的路径。

可能出现的问题是,由于Ubuntu上存在多个Python解释器,需要进行选择。就好像,哪怕在Ubuntu的terminal下,输入python python2 python3 python3.5等会进入不同的Python版本,那就需要确认下需要使用Python版本及其对应的解释器路径。 参考命令 which python, which python3.5 等找到这些快捷指令所指向的Interpreter根目录,别找错了。

OK 后进行连接测试

上述连接过程没有问题,就会出现一个新的Project Interfpreter——也就是远程的Python解释器,下面列举了许多已经安装的Python modules。

进行 deployment的配置

Deployment-Connection Root path的话,就放用户的根目录即可——可以使用Autodetect,这个目录也就是在Ubuntu的terminal里面,登录到一个user后默认的路径,比如/home/user一般如果路径切换到别的地方了,直接在terminal里面cd 快速切换到用户的根目录下。

Deployment-Mappings 从图上也能够看出,实际上 Local PathDeployment Path——远程服务器上的文件夹建立一个对等关系,在进行Upload的时候,即将本地的文件“对等复制”到远程服务器的 Deployment Path 之下, 然后远程服务器的Python Interpreter实际上运行的是远程服务器上的Python文件,然后将输出结果打印在本地PyCharm的Console里面。 这是我的理解。 我为什么会产生这样的理解? 因为最开始我没有正确配置这个Deployment-Mappings的时候,发现Python解释产生错误,提示在Root Path下面并没有可运行的Python同名脚本;所以,我才明白远程服务器实际上解释的是其本地的Python脚本,所以前提需要一个文件夹进行“对等复制” 再看前两个图中,有一个菜单选项是Upload功能,实际上就在传输本地的文件到远程服务器上。

Errors

  1. 对PyCharm的基本流程最初认识非常模糊;
  2. 在服务器端,Python的版本管理非常混乱。

A little Error: 不能够正常使用TensorFlow

已经在工作站A上正常安装了TensorFlow,通过terminal远程到工作站A上,能够正常 import tensorflow以及其他的Python modules;但是,通过PyCharm分明按照上面的步骤,已经将本地文件Upload到工作站的对应目录之下,却无法在本地(笔记本B)在PyCharm环境内正常运行包含import tensorflow的Python脚本。

rss facebook twitter github youtube mail spotify instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora