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批量按比例缩小图片脚本分享
May 21 Python
Python的条件语句与运算符优先级详解
Oct 13 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
python 集合 并集、交集 Series list set 转换的实例
May 29 Python
Django 用户认证组件使用详解
Jul 23 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
python实现高斯(Gauss)迭代法的例子
Nov 20 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
PyTorch中topk函数的用法详解
Jan 02 Python
python实现电子词典
Mar 03 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 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运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
PHP抽象类 介绍
2012/06/13 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
简单的js分页脚本
2009/05/21 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
基于Python os模块常用命令介绍
2017/11/03 Python
Python中django学习心得
2017/12/06 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
函授毕业生的自我鉴定
2013/11/26 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
诚信考试承诺书
2014/03/27 职场文书
新闻传播专业求职信
2014/07/22 职场文书
委托书格式
2014/08/01 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
涨价通知怎么写
2015/04/23 职场文书