前言
除了本地開發(fā)外,還有一種常見的開發(fā)方式就是遠程開發(fā),一般情況是一臺Windows或mac筆記本作為日常使用的電腦,另有一臺linux服務(wù)器作為開發(fā)服務(wù)器。開發(fā)服務(wù)器的性能往往較強,這樣遠程開發(fā)的方式一方面可以讓我們在習慣的系統(tǒng)下工作,又能利用強大的服務(wù)器,而且linux下開發(fā)python往往比win下要方便得多。
現(xiàn)階段,使用比較廣泛的python開發(fā)工具是Pycharm和VSCode(Jupyter Notebook/Lab也有一些人用,不過本人還是認為做做驗證可以,真的做日常開發(fā)還是不太方便),下面就以這2個工具分別介紹他們的遠程開發(fā)的方式,可以按需選擇。
Pycharm
Pycharm應(yīng)該可以算是最強大的python IDE了,但與它強大的本地開發(fā)能力相比,它的遠程開發(fā)能力一般,特別是以前,它的遠程開發(fā)實際基于SFTP, 遠程目錄和本地目錄不斷進行同步,這種方式使用起來麻煩,嚴格來說算不上真的遠程開發(fā)。后來Jetbrains又搞起了Projector,顧名思義就是把遠程IDE投射到本地,再后來,Projector停止開發(fā)了,轉(zhuǎn)而開發(fā)Gateway...才有點向VSCode的遠程開發(fā)看齊的意思了。
SFTP方式
這個方式的使用可以參考在PyCharm上配置SFTP并使用遠程解釋器-騰訊云開發(fā)者社區(qū)-騰訊云 (tencent.com),對于Python來說,基本可以忽略這個方式了。對于使用CLion C++來說,這種方式還有一定作用,就是在目標運行環(huán)境是嵌入式設(shè)備的時候:CLion遠程調(diào)試嵌入式開發(fā)板程序_CodingInCV的博客-CSDN博客
Projector方式
這一方式是基于RDP(remote display protocol)協(xié)議,將IDE運行的畫面通過web的形式顯式,比較類似于VSCode的web方案CodeServer。
官方文檔:JetBrains IDEs - Projector documentation
官方項目:JetBrains/projector-server: Server-side library for running Swing applications remotely (github.com)
這個項目還有一個客戶端項目:
個人體驗來說,是比較一般的,一個比較嚴重的問題是這種方式對網(wǎng)速要求高,而且bug較多,有時會閃退。配置起來也比較麻煩。如果使用純?yōu)g覽器的話,有一個問題就是瀏覽器本身有很多快捷鍵,會導(dǎo)致軟件的快捷鍵和本地使用不一致,比如原本本地使用的F12,在瀏覽器就需要Ctrl+F12,用起來不太舒服,用客戶端會好一些,不過客戶端有bug,現(xiàn)在也停止開發(fā)了,轉(zhuǎn)而到Gateway了,這一方式也不用再嘗試了。
Gateway
GateWay是Jetbrains最新的遠程方案了,目標是和VSCode看齊,下面重點介紹這種方式。
官方網(wǎng)站:Remote development overview | PyCharm Documentation (jetbrains.com)
整個過程由Client、Gateway和IDE Backend構(gòu)成,前2者運行在本地主機,IDE Backend運行在遠程linux主機。
安裝
這種方式我們只需要在本地主機安裝Gateway,而不再需要安裝IDE本身。
下載安裝包:JetBrains Gateway - JetBrains IDE 的遠程開發(fā)
Gateway遠程開發(fā)屬于專業(yè)版的功能,可以試用或激活后使用。
可參考:https://www.cnblogs.com/haoliuhust/p/17510176.html)
配置遠程主機SSH信息
安裝完成后打開軟件,選擇SSH->New Connection新建連接,填入遠程主機信息:
如果不想每次都輸入密碼,則可以指定私鑰。
安裝IDE Backend
設(shè)置好SSH信息后,根據(jù)提示選擇IDE版本。默認會自動拉取安裝包,如果遠程主機的網(wǎng)絡(luò)不好或者不能聯(lián)網(wǎng),也可以本地下好,點擊“Installation options”上傳。
設(shè)置完成后,工具將開始下載IDE到遠程主機,等待安裝完成。
使用
安裝完成后,將打開Pycharm界面,基本上使用和本地開發(fā)沒有區(qū)別。
主要的區(qū)別是設(shè)置中有一些選項分為client和host,包括插件也會分client和host, 基本和VSCode類似。
另一個區(qū)別是點擊關(guān)閉軟件時,會有幾個選項:
Close and Stop就是把遠程的IDE Backend也關(guān)閉,下次再連接時IDE要重新啟動,而Close and Keep Running則只關(guān)閉客戶端,遠程的IDE Backend還繼續(xù)運行,下次連接速度會更快。
下次再打開Gateway時,會顯式我們已有的連接,點擊名稱就會連接上,非常的方便。
VSCode
vscode的遠程開發(fā)就比較方便了,不僅目標主機可以是實際的主機,也可以是docker 容器或者WSL。vscode也有兩種方式,一種是SSH, 一種是 The VS Code Server,還處在預(yù)覽階段,大部分所說的vscode遠程都是指SSH的方式。
這種方式和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為例)
1、打開“設(shè)置”,選擇“應(yīng)用”>“應(yīng)用和功能”,然后選擇“可選功能” 。
2、掃描列表,查看是否已安裝 OpenSSH。 如果未安裝,請在頁面頂部選擇“添加功能”,然后:
- 查找“OpenSSH 客戶端”,再單擊“安裝”
對于作為開發(fā)的本地機來說,我們只需要裝客戶端就好了。
- 命令行安裝
還可以通過Powershell命令行安裝
若要使用 PowerShell 安裝 OpenSSH,請先以管理員身份運行 PowerShell。 為了確保 OpenSSH 可用,請運行以下 cmdlet:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
如果兩者均尚未安裝,則此操作應(yīng)返回以下輸出:
Name : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
然后,根據(jù)需要安裝服務(wù)器或客戶端組件:
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
這兩者應(yīng)該都會返回以下輸出:
Path :
Online : True
RestartNeeded : False
安裝VSCode
Download Visual Studio Code - Mac, Linux, Windows
下載安裝VSCode軟件,按提示安裝即可
安裝遠程開發(fā)插件
在Extensions中搜索Remote - SSH插件安裝,安裝后側(cè)邊欄將會出現(xiàn)Remote Explorer圖標:
連接遠程服務(wù)器
密碼登陸
點擊“+”,在彈出的輸入框中輸入ssh登陸信息,并根據(jù)提示輸入密碼。
第一次連接時VSCode將在遠程機上安裝VSCode Server。
安裝完成后,就可以打開遠程主機上的文件或文件夾進行開發(fā)了。
為了開發(fā)python程序,還需要安裝Pylance和Python插件
當我們打開Python項目或文件時,將會提示我們設(shè)置Python解釋器,或手動在界面切換:
這樣就配置完畢了,接下來的開發(fā)就像在本地使用VSCode開發(fā)python程序一樣了。
免密連接
上一步中,可能會需要頻繁輸入密碼,我們可以通過設(shè)置免密登錄的方式,免去這個過程。
本地電腦生成密鑰
ssh-keygen -t rsa -b 4096
在本地命令行執(zhí)行上述命令,生成私鑰和公鑰,windows上一般位于C:\Users\your-user\.ssh\id_xxx.pub)
授權(quán)遠程主機
ssh-copy-id user-name@ip
或者指定公鑰文件
ssh-copy-id -i xx.pub user-name@ip
這樣我們就不再需要輸入密碼了。
進階:修改VSCode連接配置
有一種情況是我們可能對不同的遠程主機有不同的密鑰,這時,就需要修改VSCode的連接配置來使用不同的私鑰了
Remote Explorer->OpenSSH Config,修改(若沒有則添加)配置文件中的IdentityFile為對應(yīng)公鑰的私鑰文件。
補充:CodeServer
VSCode還有一個開源社區(qū)實現(xiàn)的瀏覽器版本:coder/code-server: VS Code in the browser (github.com)
不過這種方式就和Jetbrains的Projector一樣,基于瀏覽器不可避免的會出現(xiàn)一些快捷鍵用不了,需要改變操作習慣,總歸不太方便。
總結(jié)
對于Python遠程開發(fā),可以在在Gateway和VSCode中2選一,如無必要,不應(yīng)再去折騰Jetbrains曾經(jīng)的SFTP和Projector方式,基于Web的Jupyter Notebook和Code Server可以作為驗證開發(fā),用于正式開發(fā)個人覺得還是不便。
Jetbrains Gateway:
優(yōu)點:Pycharm本身的功能比較強大,對于習慣使用Pycharm開發(fā)的來說,遠程開發(fā)基本沒有差異,沒有任何學習成本。Pycharm的配置和調(diào)試也要比VSCode方便一些,畢竟是專業(yè)的Python IDE。
缺點:只有專業(yè)版才有這個功能,因此需要收費。IDE Backend的包大小要比VSCode Server大不少,在新的環(huán)境上配置的時間會比VSCode長,對于需要頻繁切換遠程來說就不太方便了(比如遠程環(huán)境是臨時分配的機器,有些公司有深度學習平臺,根據(jù)請求,每次分配機器用于調(diào)試深度學習代碼),另一方面,對于連接到容器也沒有VSCode方便。
適合場景和人群:基于上面的特點,Jetbrains Gateway適合遠程開發(fā)機比較固定的情況。
VSCode
優(yōu)點:免費,VSCode Server比較小,配置時間比較短。插件系統(tǒng)豐富,通過插件,對Jupyter Notebook也有較好的支持。另一方面,通過插件,VSCode對python之外的其他語言也有較好的支持,可以在一個環(huán)境內(nèi)開發(fā)不同的語言。
缺點:調(diào)試功能沒有Pycharm那么強大和方便,相對需要一些學習成本。
適合場景和人群:多語言開發(fā)者,遠程開發(fā)機不固定,(還有缺錢買Pycharm專業(yè)版的...)
希望通過上面的介紹,大家能找到適合自己的開發(fā)工具。