python 开发之远程开发工具对比
前言
除了本地开发外,还有一种常见的开发方式就是远程开发,一般情况是一台 Windows 或 mac 笔记本作为日常使用的电脑,另有一台 linux 服务器作为开发服务器。开发服务器的性能往往较强,这样远程开发的方式一方面可以让我们在习惯的系统下工作,又能利用强大的服务器,而且 linux 下开发 python 往往比 win 下要方便得多。现阶段,使用比较广泛的 python 开发工具是 Pycharm 和 VSCode(Jupyter Notebook/Lab 也有一些人用,不过本人还是认为做做验证可以,真的做日常开发还是不太方便),下面就以这 2 个工具分别介绍他们的远程开发的方式,可以按需选择。
Pycharm
Pycharm 应该可以算是最强大的 python IDE 了,但与它强大的本地开发能力相比,它的远程开发能力一般,特别是以前,它的远程开发实际基于 SFTP, 远程目录和本地目录不断进行同步,这种方式使用起来麻烦,严格来说算不上真的远程开发。后来 Jetbrains 又搞起了 Projector,顾名思义就是把远程 IDE 投射到本地,再后来,Projector 停止开发了,转而开发 Gateway...才有点向 VSCode 的远程开发看齐的意思了。
SFTP 方式
这个方式的使用可以参考在PyCharm上配置SFTP并使用远程解释器-腾讯云开发者社区-腾讯云 (tencent.com),对于 Python 来说,基本可以忽略这个方式了。对于使用 CLion C++来说,这种方式还有一定作用,就是在目标运行环境是嵌入式设备的时候:CLion远程调试嵌入式开发板程序_CodingInCV的博客-CSDN博客
Projector 方式
这一方式是基于 RDP(remote display protocol)协议,将 IDE 运行的画面通过 web 的形式显式,比较类似于 VSCode 的 web 方案 CodeServer。官方文档:JetBrains IDEs - Projector documentation官方项目:JetBrains/projector-server: Server-side library for running Swing applications remotely (github.com)
![](https://static001.geekbang.org/infoq/6f/6f79b7f402933610c430791381bbf639.png)
这个项目还有一个客户端项目:
![](https://static001.geekbang.org/infoq/e7/e76d1df07fbb1c71f521532136771c26.png)
个人体验来说,是比较一般的,一个比较严重的问题是这种方式对网速要求高,而且 bug 较多,有时会闪退。配置起来也比较麻烦。如果使用纯浏览器的话,有一个问题就是浏览器本身有很多快捷键,会导致软件的快捷键和本地使用不一致,比如原本本地使用的 F12,在浏览器就需要 Ctrl+F12,用起来不太舒服,用客户端会好一些,不过客户端有 bug,现在也停止开发了,转而到 Gateway 了,这一方式也不用再尝试了。
Gateway
GateWay 是 Jetbrains 最新的远程方案了,目标是和 VSCode 看齐,下面重点介绍这种方式。
![](https://static001.geekbang.org/infoq/58/58fd290451a4392b63be9ee9fa53cf88.png)
官方网站:Remote development overview | PyCharm Documentation (jetbrains.com)整个过程由 Client、Gateway 和 IDE Backend 构成,前 2 者运行在本地主机,IDE Backend 运行在远程 linux 主机。
安装
这种方式我们只需要在本地主机安装 Gateway,而不再需要安装 IDE 本身。下载安装包:JetBrains Gateway - JetBrains IDE 的远程开发Gateway 远程开发属于专业版的功能,可以试用或激活后使用。可参考:https://www.cnblogs.com/haoliuhust/p/17510176.html)
配置远程主机 SSH 信息
安装完成后打开软件,选择 SSH->New Connection 新建连接,填入远程主机信息:
![](https://static001.geekbang.org/infoq/f4/f40a8b4bf9d1d39bc7889285c74f076b.png)
如果不想每次都输入密码,则可以指定私钥。
安装 IDE Backend
设置好 SSH 信息后,根据提示选择 IDE 版本。默认会自动拉取安装包,如果远程主机的网络不好或者不能联网,也可以本地下好,点击“Installation options”上传。
![](https://static001.geekbang.org/infoq/29/299ef62e41a000bfe911296a23a62450.png)
设置完成后,工具将开始下载 IDE 到远程主机,等待安装完成。
![](https://static001.geekbang.org/infoq/4f/4fac6deb9534a3512cdc79832b236aaf.png)
使用
安装完成后,将打开 Pycharm 界面,基本上使用和本地开发没有区别。
![](https://static001.geekbang.org/infoq/af/af5beccb8e5d101eab631079b26aedac.png)
主要的区别是设置中有一些选项分为 client 和 host,包括插件也会分 client 和 host, 基本和 VSCode 类似。
![](https://static001.geekbang.org/infoq/b6/b6b08e997bc916c4d7081e0a7cade00a.png)
另一个区别是点击关闭软件时,会有几个选项:
![](https://static001.geekbang.org/infoq/ed/edf6ddd75b439dc6c8816f0c154a0b2d.png)
Close and Stop 就是把远程的 IDE Backend 也关闭,下次再连接时 IDE 要重新启动,而 Close and Keep Running 则只关闭客户端,远程的 IDE Backend 还继续运行,下次连接速度会更快。下次再打开 Gateway 时,会显式我们已有的连接,点击名称就会连接上,非常的方便。
![](https://static001.geekbang.org/infoq/88/8858a243f60333d71b02c7dfdc92c665.png)
VSCode
vscode 的远程开发就比较方便了,不仅目标主机可以是实际的主机,也可以是 docker 容器或者 WSL。vscode 也有两种方式,一种是 SSH, 一种是 The VS Code Server,还处在预览阶段,大部分所说的 vscode 远程都是指 SSH 的方式。
![](https://static001.geekbang.org/infoq/93/936fef9a778578b307d5ee62fe8791b6.png)
这种方式和 Jetbrains Gateway 一样,远程运行一个 VS Code Server。不过这个 Code Server 相比 Jetbrains 的 IDE Backend,要轻量很多,因此安装起来速度更快。这也能理解,毕竟 vscode 的很多功能都是通过插件完成的,本体本身是比较小的,而 Pycharm 是个 IDE, 本身就集成了大部分的功能。官方文档:Developing on Remote Machines using SSH and Visual Studio Code
安装
启用 OpenSSH 客户端(以 win10 为例)
图形化安装
![](https://static001.geekbang.org/infoq/78/789ed44a0f88c5094c577bba1f78e0f6.png)
打开“设置”,选择“应用”>“应用和功能”,然后选择“可选功能” 。
扫描列表,查看是否已安装 OpenSSH。 如果未安装,请在页面顶部选择“添加功能”,然后:
查找“OpenSSH 客户端”,再单击“安装”
对于作为开发的本地机来说,我们只需要装客户端就好了。
命令行安装
还可以通过 Powershell 命令行安装
若要使用 PowerShell 安装 OpenSSH,请先以管理员身份运行 PowerShell。 为了确保 OpenSSH 可用,请运行以下 cmdlet:
如果两者均尚未安装,则此操作应返回以下输出:
然后,根据需要安装服务器或客户端组件:
这两者应该都会返回以下输出:
安装 VSCode
Download Visual Studio Code - Mac, Linux, Windows下载安装 VSCode 软件,按提示安装即可
安装远程开发插件
在 Extensions 中搜索 Remote - SSH 插件安装,安装后侧边栏将会出现 Remote Explorer 图标:
![](https://static001.geekbang.org/infoq/4b/4b66ed32c1f990f12bb4f4414e92fe23.png)
连接远程服务器
密码登陆
![](https://static001.geekbang.org/infoq/ff/ffd13b41f2c7409cb587b07cb05c15d6.png)
点击“+”,在弹出的输入框中输入 ssh 登陆信息,并根据提示输入密码。第一次连接时 VSCode 将在远程机上安装 VSCode Server。
![](https://static001.geekbang.org/infoq/0c/0cfbd9d3f5e7239794d1f654d21a117f.png)
安装完成后,就可以打开远程主机上的文件或文件夹进行开发了。
![](https://static001.geekbang.org/infoq/e4/e43d4dd3cfc5c0e2d03a095114259ea9.png)
为了开发 python 程序,还需要安装 Pylance 和 Python 插件
![](https://static001.geekbang.org/infoq/7e/7e2b417996d34db489f7aa8f3e4d837d.png)
当我们打开 Python 项目或文件时,将会提示我们设置 Python 解释器,或手动在界面切换:
![](https://static001.geekbang.org/infoq/7f/7f29b01b2a52e187e86499c56a000feb.png)
这样就配置完毕了,接下来的开发就像在本地使用 VSCode 开发 python 程序一样了。
免密连接
上一步中,可能会需要频繁输入密码,我们可以通过设置免密登录的方式,免去这个过程。本地电脑生成密钥
在本地命令行执行上述命令,生成私钥和公钥,windows 上一般位于C:\Users\your-user\.ssh\id_xxx.pub)
授权远程主机
这样我们就不再需要输入密码了。进阶:修改 VSCode 连接配置有一种情况是我们可能对不同的远程主机有不同的密钥,这时,就需要修改 VSCode 的连接配置来使用不同的私钥了
![](https://static001.geekbang.org/infoq/79/79cb442bdc1aa4a2d4b5ffa8dd7954ed.png)
Remote Explorer->OpenSSH Config,修改(若没有则添加)配置文件中的 IdentityFile 为对应公钥的私钥文件。
补充:CodeServer
VSCode 还有一个开源社区实现的浏览器版本:coder/code-server: VS Code in the browser (github.com)不过这种方式就和 Jetbrains 的 Projector 一样,基于浏览器不可避免的会出现一些快捷键用不了,需要改变操作习惯,总归不太方便。
总结
对于 Python 远程开发,可以在在 Gateway 和 VSCode 中 2 选一,如无必要,不应再去折腾 Jetbrains 曾经的 SFTP 和 Projector 方式,基于 Web 的 Jupyter Notebook 和 Code Server 可以作为验证开发,用于正式开发个人觉得还是不便。
Jetbrains Gateway:
优点:Pycharm 本身的功能比较强大,对于习惯使用 Pycharm 开发的来说,远程开发基本没有差异,没有任何学习成本。Pycharm 的配置和调试也要比 VSCode 方便一些,毕竟是专业的 Python IDE。
缺点:只有专业版才有这个功能,因此需要收费。IDE Backend 的包大小要比 VSCode Server 大不少,在新的环境上配置的时间会比 VSCode 长,对于需要频繁切换远程来说就不太方便了(比如远程环境是临时分配的机器,有些公司有深度学习平台,根据请求,每次分配机器用于调试深度学习代码),另一方面,对于连接到容器也没有 VSCode 方便。
适合场景和人群:基于上面的特点,Jetbrains Gateway 适合远程开发机比较固定的情况。
VSCode
优点:免费,VSCode Server 比较小,配置时间比较短。插件系统丰富,通过插件,对 Jupyter Notebook 也有较好的支持。另一方面,通过插件,VSCode 对 python 之外的其他语言也有较好的支持,可以在一个环境内开发不同的语言。
缺点:调试功能没有 Pycharm 那么强大和方便,相对需要一些学习成本。
适合场景和人群:多语言开发者,远程开发机不固定,(还有缺钱买 Pycharm 专业版的...)希望通过上面的介绍,大家能找到适合自己的开发工具。
文章转载自:CoderInCV
评论