公司想用Python开发一个基于Linux的系统。我不忍心把我的“高端Mac”换成又矮又丑的Linux(更何况团队里还有很多用Windows的同事)。借助PyCharm的远程调试,可以实现“本地编写代码,远程调试”。在配置PyCharm远程调试和选择ProjectInterpreter时,我们可以选择“AddRemote”。账号密码,查看服务器端的Python路径。确认后PyCharm会在远程机器上安装PythonHelpers(.pycharm_helpers默认安装在Home目录下,比如我用的是fireflyc所以目录是/home/fireflyc/.pycharm_helpers)。这里最关键的步骤之一——路径映射。是本地路径和服务器路径的映射关系。当我们在本地执行Debug时,代码实际上是在远程Linux上执行的。这就必须要解决一个问题——如何将代码同步到远程Linux。最简单的方法是通过VMware安装虚拟机,使用“文件共享”的方式。设置完成后,需要在PathMapping中添加映射关系。LocalPath为项目根目录,RemotePath为共享文件夹所在目录。执行起来,“丝滑如丝”,还可以断点。远程调试的原理远程调试并不是什么黑魔法,它是IDE工具发展的一种趋势——前端后端细分。前端倾向于完成代码的编辑和展示,相当于搭建了一个框架;后端用于某种语言的语法高亮显示、代码提示、自动完成、代码格式化和调试。例如,视觉代码在这一点上非常明显。VSC只提供了一个“编辑器”的功能,各种语言的高亮、代码提示、格式化、调试都是通过“插件”来实现的。这个插件不是传统意义上的“静态”,而是一个独立的进程。VisualCode调用了这个语言服务器,并制定了语言服务器协议规范。有兴趣的朋友可以看看或者尝试写个插件。PyCharm并没有那么彻底,它只是把Debug部分做成了一个单独的Server。看看“神秘”的.pycharm_helpers,一目了然。PyCharm远程调试时,我们偷偷看一下过程,真相大白。原理其实很简单。调试时,PyCharm通过SSH在远程Linux上执行pydev,这个过程会执行本地的python代码。pydev和Pycharm会进行网络通信,传递“断点、取消断点、单步执行”等调试动作,端口为-45140。自动化开发环境解决了远程调试问题后,“开发环境”的问题就可以了顺便解决;大家新建虚拟机很麻烦,可能选择的release版本也千奇百怪。所以通过vagrant来管理“开发虚拟机”是一个很好的做法。该脚本将生成一个ubuntu/trusty64镜像虚拟机(ubuntu14),使用virtualbox;将虚拟机的8000端口映射到本机的8000端口;设置共享目录(我的Vagrantfile在项目根目录下的dev文件夹中,所以../其实就是项目的根目录);设置虚拟机第一次启动时要执行的脚本(会设置软件源,关闭防火墙等)整个开发环境通过上面的配置就自动化了开发者拿到后代码,切换到dev目录执行vagrantup,然后选择PathMapping。系统会自动帮我们添加(根据vagrantfile的配置)。Vagrant总结Vagrant是一个定义虚拟机的配置工具。可以使用一段Ruby脚本设置自己虚拟机的大小、配置、虚拟化软件,然后执行vagrantup自动创建虚拟机。Vagrant会自动生成一个vagrant用户,同时生成一对SSH密钥。私钥会放在.vagrant文??件夹中(执行vagrantup后会看到一个.vagrant文??件夹)。当我们执行vagrantsshxxx时,会自动使用这个私钥登录。所以PyCharm的配置其实还是通过SSH,原理没变。关于DockerPyCharm也支持Docker,但我认为这不是很有用。在MacOS和Windows上,Docker实际上是启动一个虚拟机并在其中安装Linux,然后在其中安装Docker。总结一下,远程调试其实只有两个关键点。pydev帮我们解决了远程断点和启动的问题;我们必须自己解决代码同步问题。所有文章都使用虚拟机作为开发环境,你也可以使用公用机作为开发环境。在这种情况下,您必须通过以下方式启用文件同步。***再补充一点,我推荐使用vagrant,它可以帮助我们“规范化虚拟机”;如果你开发的程序必须用root启动(vagrant是用vagrant用户启动的),那你就只能用ssh了。(我们也可以直接让vagrant给我们生成一个虚拟机,我们进去修改root密码,然后通过ssh连接进去。)查看更多该作者的好文章
