PyCharm 配置远程python解释器和在本地修改服务器代码


Posted in Python onJuly 23, 2019

最近在学习机器学习的过程中,常常需要将本地写的代码传到GPU服务器中,然后在服务器上运行。之前的做法一直是先在本地写好代码,然后通过FileZilla这样的文件传输工具来将写好的文件传到服务器,再通过ssh工具远程连接到服务器,执行相应的python脚本。这样的方式十分繁琐,效率很低。今天听到朋友提到了配置远程解释器

使用场景

先说说自己的使用场景,我是在什么情况下,需要将IDE配置成这样的环境来方便我的工作。

首先,我需要在本地机子上写python代码,但是因为是机器学习相关的一些代码,有时候本机跑可能会很慢,或者根本跑不下来。而此时,我还有一台可用的服务器,上面配置了相应的python3环境和相应的机器学习库,比如tensorflow,keras,tflearn等等。因此通常需要将本地写好的代码上传到服务器上,在服务器上运行。由于代码能力渣渣,所以常常需要反复修改代码,而直接在服务器上修改代码不是很方便。因此,我希望可以像下面一样操作:

  1. 我在服务器上有一个工作目录,我希望可以直接在我本地机子上修改工作目录下面的代码文件
  2. 因为Pycharm可以配置远程python解释器,所以我希望可以直接在本地的机子上运行修改的代码,并且直接在本地机子查看运行的结果,而不用ssh到远程服务器在执行代码。
  3. 具体来说就是,我可以直接在本地上编写代码,然后直接点击pycharm的绿色小三角执行代码,并且这个执行是由远程服务器的python解释器执行的,而不是在我本地机子上配置的python环境下执行。

配置过程

本机环境

操作系统:win10

IDE:Pycharm

远程服务器

操作系统:ubuntu14.04

配置了ssh,可以使用ssh进行远程登陆

配置Deployment

首先,在pycharm的菜单栏依次找到:Tools > Deployment > Configuration.

PyCharm 配置远程python解释器和在本地修改服务器代码

然后可以看到如下的配置页面,具体各配置在图片中说明:

PyCharm 配置远程python解释器和在本地修改服务器代码

然后打开Deployment的Mapping选项卡:

PyCharm 配置远程python解释器和在本地修改服务器代码

这样,Deployment的配置就完成了。这个配置完成了之后,其实是相当于配置了一个ftp工具可以连接到服务器上,从而可以查看和修改服务器上的文件。你可以通过Tools > Deplotment > Browse Remote Host来打开相应的RemoteHost面板,这个面板显示的就是服务器上的文件,显示的范围是你在Deployment中的Connection选项卡下配置的Root path路径下的文件及文件夹。

PyCharm 配置远程python解释器和在本地修改服务器代码

你可以直接在RemoteHost面板里双击某个文件并且直接进行编辑。双击某个文件后你可以看到编辑区域的顶部有一个横条,并且横条的右边有三各按钮,分别是比较,撤销和上传操作。你在这里面编辑文件之后,可以直接点击上传按钮,就会提交到服务器了。但是其实不推荐直接在这里修改代码,后面的使用流程会说到。

PyCharm 配置远程python解释器和在本地修改服务器代码

以上的配置,就可以直接在PyCharm里看到服务器上的文件,我感觉就像是直接在IDE里集成了一个FTP传输工具。

配置远程python解释器

这里主要讲的是如何配置远程python解释器。

首先,通过File > Settings,打开设置选项卡。

在设置选项卡里,点击"Project:项目名"这个按钮,在展开的小项里再点击Project Interpreter,右边就会变成Interpreter的配置页面。

PyCharm 配置远程python解释器和在本地修改服务器代码

点击Interpreter配置页面的小此轮按钮,然后再选择add Remote。

PyCharm 配置远程python解释器和在本地修改服务器代码

弹出如下弹窗并配置相应的信息。

PyCharm 配置远程python解释器和在本地修改服务器代码

经过以上步骤,你的远程解释器就配置好了。这时,你就可以直接点击小三角按钮,调用远程服务器上的python解释器来运行代码。但是在此,你还需要看看下面的使用流程。如果你直接双击RemoteHost面板里的文件,然后点击小三角运行是会报错的,可能会提示:

No such file or directory

在配置中也参考了很多其他文章,但是有些文章还是没有讲清楚具体的流程,因此我把自己认为可能“正确”的流程记录一下。

在介绍Deployment配置的时候,我们讲到了Mapping选项卡的配置。这个配置将本地的一个路径映射成了服务器上的一个路径,因此,在这个文件夹下的文件和服务器上的文件是同步的,当然,需要你在本地修改的时候upload到服务器或者设置自动upload。

在这里,我的mapping配置如下:

local path Deployment path on server
E:\workspace\remotespace xxxx/workspacexhh

首先,我们在pycharm中通过 File > open... 来打开一个新的项目,项目路径就选择上面的local path路径。

在Project窗口中就可以看到打开了这个项目,当前这个项目还是空的,里面什么也没有。

PyCharm 配置远程python解释器和在本地修改服务器代码

然后,我们打开RemoteHost小窗口,在test.py文件上右键,再选择Download from Here,文件就会下载到本地了。返回到Project小窗口,就可以看到test.py。其他的文件类似,如果有父目录,他会将父目录也一起下载下来,所以文件和路径都会和服务器保持一致。

PyCharm 配置远程python解释器和在本地修改服务器代码

这样,你就可以在本地编辑test.py文件。

PyCharm 配置远程python解释器和在本地修改服务器代码

在编辑完成后,你可以在文件上右键或者直接在编辑区域右键,选择upload to... 将文件上传到服务器,这样就可以更新服务器端的代码了,并且保持了和本地代码一致。

PyCharm 配置远程python解释器和在本地修改服务器代码

此时,点击绿色小三角运行代码,可以看到相应的输出。但是看看控制台的输出,可以发现,python解释器不是本地的,而跑的文件也不是本地。

PyCharm 配置远程python解释器和在本地修改服务器代码

上面就是整个从服务器下载文件至本地,在本地修改文件,将文件上传至服务器,然后直接在本地运行的整个过程。

在这个过程中,也可以发现,经过这样的配置,我们的代码现在一共有三个版本:一个是本地代码,一个是服务器上的代码,还有一个是RemoteHost面板中的代码(这个地方的代码如果直接编辑了,其实也可以提交到服务器,但是不能直接运行)

所以,如果通过上面的配置进行远程调试的话,我认为大致流程应该是下面这样:

  1. 在RemoteHost面板中,选中想要修改的代码,然后右键点击Download from here将内容下载至本地(这个本地是你在配置Deployment时设置的本地文件夹)。
  2. 在本地(这个本地是你在配置Deployment时设置的本地文件夹)修改你的代码,修改完成后在编辑区域或者文件名上右键,选择upload to...来提交到服务器。
  3. 在提交之后,你可以像普通调用本地解释器一样的直接运行本地的这个文件(但其实运行的是服务器的文件)

在这里,虽然RemoteHost里的文件可以直接编辑,但是并不建议这么做,因为这里编辑之后并不能直接运行。

Python 相关文章推荐
python logging类库使用例子
Nov 22 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
Python中的引用和拷贝实例解析
Nov 14 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
python使用正则来处理各种匹配问题
Dec 22 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
Python学习之time模块的基本使用
Jan 17 Python
Python实现简单的猜单词
Jun 15 Python
python基础之函数的定义和调用
Oct 24 Python
python实现DEM数据的阴影生成的方法
Jul 23 #Python
Django REST framework 如何实现内置访问频率控制
Jul 23 #Python
详解pandas中MultiIndex和对象实际索引不一致问题
Jul 23 #Python
python视频按帧截取图片工具
Jul 23 #Python
python如何实现从视频中提取每秒图片
Oct 22 #Python
详解Django 时间与时区设置问题
Jul 23 #Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 #Python
You might like
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
使用javascript插入样式
2016/03/14 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
亮化工程实施方案
2014/03/17 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
2014年科研工作总结
2014/12/03 职场文书
同学聚会感言一句话
2015/07/30 职场文书
python基础之函数的定义和调用
2021/10/24 Python