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的加密模块md5、sha、crypt使用实例
Sep 28 Python
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
Python设计模式之MVC模式简单示例
Jan 10 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
python实现爬山算法的思路详解
Apr 09 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
python 解决Fatal error in launcher:错误问题
May 21 Python
Django实现随机图形验证码的示例
Oct 15 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
Python实现获取某天是某个月中的第几周
2015/02/11 Python
在Django中创建第一个静态视图
2015/07/15 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
员工入职担保书范文
2014/04/01 职场文书
美国留学经济担保书
2014/05/20 职场文书
中学生逃课检讨书
2015/02/17 职场文书
PHP正则表达式之RCEService回溯
2022/04/11 PHP
使用Apache Camel表达REST服务的方法
2022/06/10 Servers
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers