python使用PyCharm进行远程开发和调试


Posted in Python onNovember 02, 2017

背景描述

有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是就在想,要是可以在服务器环境中进行单步跟踪调试就好了。

然而,在服务器系统上安装一个IDE肯定是不现实的;通过SSH远程到服务器端,采用pdb进行调试虽然可行,但是操作还是较为繁琐,而且也不够直观。

那么,是否可以将开发环境中的IDE与服务器环境相连,实现利用开发环境的IDE调试服务器环境中运行的程序呢? 答案是肯定的,这就是远程调试(Remote Debug)。

远程调试的工作原理

远程调试的功能在Eclipse、IntelliJ IDEA等大型IDE中均有支持,实现原理都基本相同,这里采用PyCharm进行说明。

在远程调试的模式下,PyCharm(IDE)扮演服务端(Server)的角色,而运行在远程计算机上的应用程序扮演客户端(Client)的角色。正因如此,进行远程调试时,需要先在本地开发环境中设定端口并启动IDE,IDE会对设定的端口开始监听,等待客户端的连接请求;那远程计算机中的应用程序又是怎样与IDE建立通讯连接的呢?

针对远程调试功能,PyCharm提供了pydevd模块,该模块以pycharm-debug.egg的形式存在于PyCharm的安装路径中。远程计算机安装该库文件后,然后就可以调用pydevd.settrace方法,该方法会指定IDE所在机器的IP地址和监听的端口号,用于与IDE建立连接;建立连接后,便可在IDE中对远程在远程计算机中的程序进行单步调试。

使用PyCharm进行远程开发和调试

你是否经常要在Windows 7或MAC OS X上面开发Python或Web应用程序,但是它们最后需要在linux上面来运行呢? 我们经常会碰到开发时没有问题但是到了正式的Linux环境下面却出现问题。那么怎样保证开发环境跟运行环境的一致呢?

通常有两种方法解决。一种是使用PyCharm内置支持的Vagrant,这个教程可以参考Vagrant开发环境配置。 不过很遗憾的是我自己在试验过程中启动VirtualBox虚拟机时候老是报错,暂时还没解决,读者可以自己试着测试看行不行。 第二种方式就是通过PyCharm的远程解释器加上文件同步功能,实现本地编辑代码->同步到服务器->通过远程debug来调试测试程序。目前我选择的是第二种,虽然比第一种更笨拙点。

远程调试的功能在Eclipse、IntelliJ IDEA等大型IDE中均有支持,实现原理都基本相同,这里采用PyCharm进行说明。

远程服务器的同步配置

远程服务器IP地址192.168.203.95,开启ssh服务,安装python版本2.7。我用一个在PyCharm里面的core-python项目来做演示。

首先我们需要配置PyCharm通服务器的代码同步,打开Tools | Deployment | Configuration

点击左边的“+”添加一个部署配置,输入名字,类型选SFTP

python使用PyCharm进行远程开发和调试

确定之后,再配置远程服务器的ip、端口、用户名和密码。root path是文件上传的根目录,注意这个目录必须用户名有权限创建文件。

python使用PyCharm进行远程开发和调试

然后配置映射,local path是你的工程目录,就是需要将本地这个目录同步到服务器上面,我填的是项目根目录。 Deploy path on server 这里填写相对于root path的目录,下面那个web path不用管先

python使用PyCharm进行远程开发和调试

如果你还有一些文件或文件夹不想同步,那么在配置对话框的第三个tab页“Excluded path”里面添加即可,可同时指定本地和远程。

还有一个设置,打开Tools | Deployment | Options,将”Create Empty directories”打上勾,要是指定的文件夹不存在,会自动创建。

上传和下载文件

有几种方法可以实现本地和远程文件的同步,手动和当文件保存后自动触发。这里我选择了手动,因为自动触发比如影响性能,PyCharm会卡,感觉不爽。

手动上传方式很简单,选择需要同步的文件或文件夹,然后选择 Tools | Deployment | Upload to sftp(这个是刚刚配置的部署名称)

python使用PyCharm进行远程开发和调试

下载文件也是一样,选择 Tools | Deployment | Download from sftp

比较远程和本地文件

有时候你并不确定远程和本地版本的完全一致,需要去比较看看。PyCharm提供了对比视图来为你解决这个问题。

选择Tools | Deployment | Browse Remote Host,打开远程文件视图,在右侧窗口就能看到远程主机中的文件

python使用PyCharm进行远程开发和调试

选择一个你想要对比的文件夹,点击右键->Sync with Local,打开同步对比窗口,使用左右箭头来同步内容。

上面是服务器与本地对比,那么本地文件通服务器对比,就先在PyCharm里面选择文件或文件夹,然后右键->Deployment->Sync with deployed to即可

PyCharm远程调试

在PyCharm中进行远程调试有两种选择:

  1. 使用远程的解释器
  2. 使用Python调试服务器

这里简单起见我只演示第一种,使用远程解释器,也就是使用服务器上面安装的python解释器。

配置远程Python解释器

选择File | Settings,选择Project | Project Interpreter,然后在右边,点击那个小齿轮设置,如下

python使用PyCharm进行远程开发和调试

然后点击”Add Remote”,填写主机的ssh配置

python使用PyCharm进行远程开发和调试

如果之前配置过SFTP的话就直接选“Deployment configuration”,然后选择刚刚的模板名称就可以了,由于我上面配置过就直接选模板, 这里请仔细看我的Python解释器是虚拟环境virtualenv,这个要在服务器上面先创建好虚拟环境。

python使用PyCharm进行远程开发和调试

开始调试

完成之后选择这个远程的解释器作为工程的解释器即可,然后配置一个运行实例,打断点调试。 这里我以另外一个django工程为例来说明,名字为zspace,因为用一个web工程来说明更具代表性。

选择“Run/Debug Configuration”,添加一个“Django server”,然后配置像下面这样写

python使用PyCharm进行远程开发和调试

请注意图中标出的几个点,具体什么意思就不用多解释了吧,^_^

然后你就可以像本地调试一样打断点做调试了。这个步骤太简单就不截图了,记得修改源码后同步到服务器继续下一次的调试。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python查找相似单词的方法
Mar 05 Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
python虚拟环境virtualenv的安装与使用
Sep 21 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
python 美化输出信息的实例
Oct 15 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
Jul 07 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 #Python
详解Python里使用正则表达式的ASCII模式
Nov 02 #Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 #Python
python中实现精确的浮点数运算详解
Nov 02 #Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 #Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 #Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 #Python
You might like
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
python计算对角线有理函数插值的方法
2015/05/07 Python
Python 基础知识之字符串处理
2017/01/06 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
python实现AES加密与解密
2019/03/28 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
经贸日语毕业生自荐信
2013/11/03 职场文书
学校消防安全责任书
2014/07/23 职场文书
停课通知书
2015/04/24 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
高中运动会广播稿
2015/08/19 职场文书
mysql自增长id用完了该怎么办
2022/02/12 MySQL
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers