除了本地開發外,還有一種常見的開發方式就是遠端開發,一般情況是一臺Windows或mac筆電作為日常使用的電腦,另有一臺linux伺服器作為開發伺服器。開發伺服器的效能往往較強,這樣遠端開發的方式一方面可以讓我們在習慣的系統下工作,又能利用強大的伺服器,而且linux下開發python往往比win下要方便得多。
現階段,使用比較廣泛的python開發工具是Pycharm和VSCode(Jupyter Notebook/Lab也有一些人用,不過本人還是認為做做驗證可以,真的做日常開發還是不太方便),下面就以這2個工具分別介紹他們的遠端開發的方式,可以按需選擇。
Pycharm應該可以算是最強大的python IDE了,但與它強大的本地開發能力相比,它的遠端開發能力一般,特別是以前,它的遠端開發實際基於SFTP, 遠端目錄和本地目錄不斷進行同步,這種方式使用起來麻煩,嚴格來說算不上真的遠端開發。後來Jetbrains又搞起了Projector,顧名思義就是把遠端IDE投射到本地,再後來,Projector停止開發了,轉而開發Gateway...才有點向VSCode的遠端開發看齊的意思了。
這個方式的使用可以參考在PyCharm上設定SFTP並使用遠端直譯器-騰訊雲開發者社群-騰訊雲 (tencent.com),對於Python來說,基本可以忽略這個方式了。對於使用CLion C++來說,這種方式還有一定作用,就是在目標執行環境是嵌入式裝置的時候:CLion遠端偵錯嵌入式開發板程式_CodingInCV的部落格-CSDN部落格
這一方式是基於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)
這個專案還有一個使用者端專案:
個人體驗來說,是比較一般的,一個比較嚴重的問題是這種方式對網速要求高,而且bug較多,有時會閃退。設定起來也比較麻煩。如果使用純瀏覽器的話,有一個問題就是瀏覽器本身有很多快捷鍵,會導致軟體的快捷鍵和本地使用不一致,比如原本本地使用的F12,在瀏覽器就需要Ctrl+F12,用起來不太舒服,用使用者端會好一些,不過使用者端有bug,現在也停止開發了,轉而到Gateway了,這一方式也不用再嘗試了。
GateWay是Jetbrains最新的遠端方案了,目標是和VSCode看齊,下面重點介紹這種方式。
官方網站: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->New Connection新建連線,填入遠端主機資訊:
如果不想每次都輸入密碼,則可以指定私鑰。
設定好SSH資訊後,根據提示選擇IDE版本。預設會自動拉取安裝包,如果遠端主機的網路不好或者不能聯網,也可以本地下好,點選「Installation options」上傳。
設定完成後,工具將開始下載IDE到遠端主機,等待安裝完成。
安裝完成後,將開啟Pycharm介面,基本上使用和本地開發沒有區別。
主要的區別是設定中有一些選項分為client和host,包括外掛也會分client和host, 基本和VSCode類似。
另一個區別是點選關閉軟體時,會有幾個選項:
Close and Stop就是把遠端的IDE Backend也關閉,下次再連線時IDE要重新啟動,而Close and Keep Running則只關閉使用者端,遠端的IDE Backend還繼續執行,下次連線速度會更快。
下次再開啟Gateway時,會顯式我們已有的連線,點選名稱就會連線上,非常的方便。
vscode的遠端開發就比較方便了,不僅目標主機可以是實際的主機,也可以是docker 容器或者WSL。vscode也有兩種方式,一種是SSH, 一種是 The VS Code Server,還處在預覽階段,大部分所說的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
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
如果兩者均尚未安裝,則此操作應返回以下輸出:
Name : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
然後,根據需要安裝伺服器或使用者端元件:
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
這兩者應該都會返回以下輸出:
Path :
Online : True
RestartNeeded : False
Download Visual Studio Code - Mac, Linux, Windows
下載安裝VSCode軟體,按提示安裝即可
在Extensions中搜尋Remote - SSH外掛安裝,安裝後側邊欄將會出現Remote Explorer圖示:
點選「+」,在彈出的輸入框中輸入ssh登陸資訊,並根據提示輸入密碼。
第一次連線時VSCode將在遠端機上安裝VSCode Server。
安裝完成後,就可以開啟遠端主機上的檔案或資料夾進行開發了。
為了開發python程式,還需要安裝Pylance和Python外掛
當我們開啟Python專案或檔案時,將會提示我們設定Python直譯器,或手動在介面切換:
這樣就設定完畢了,接下來的開發就像在本地使用VSCode開發python程式一樣了。
上一步中,可能會需要頻繁輸入密碼,我們可以通過設定免密登入的方式,免去這個過程。
本地電腦生成金鑰
ssh-keygen -t rsa -b 4096
在本地命令列執行上述命令,生成私鑰和公鑰,windows上一般位於C:\Users\your-user\.ssh\id_xxx.pub)
授權遠端主機
ssh-copy-id user-name@ip
或者指定公鑰檔案
ssh-copy-id -i xx.pub user-name@ip
這樣我們就不再需要輸入密碼了。
進階:修改VSCode連線設定
有一種情況是我們可能對不同的遠端主機有不同的金鑰,這時,就需要修改VSCode的連線設定來使用不同的私鑰了
Remote Explorer->OpenSSH Config,修改(若沒有則新增)組態檔中的IdentityFile為對應公鑰的私鑰檔案。
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可以作為驗證開發,用於正式開發個人覺得還是不便。
優點:Pycharm本身的功能比較強大,對於習慣使用Pycharm開發的來說,遠端開發基本沒有差異,沒有任何學習成本。Pycharm的設定和偵錯也要比VSCode方便一些,畢竟是專業的Python IDE。
缺點:只有專業版才有這個功能,因此需要收費。IDE Backend的包大小要比VSCode Server大不少,在新的環境上設定的時間會比VSCode長,對於需要頻繁切換遠端來說就不太方便了(比如遠端環境是臨時分配的機器,有些公司有深度學習平臺,根據請求,每次分配機器用於偵錯深度學習程式碼),另一方面,對於連線到容器也沒有VSCode方便。
適合場景和人群:基於上面的特點,Jetbrains Gateway適合遠端開發機比較固定的情況。
優點:免費,VSCode Server比較小,設定時間比較短。外掛系統豐富,通過外掛,對Jupyter Notebook也有較好的支援。另一方面,通過外掛,VSCode對python之外的其他語言也有較好的支援,可以在一個環境內開發不同的語言。
缺點:偵錯功能沒有Pycharm那麼強大和方便,相對需要一些學習成本。
適合場景和人群:多語言開發者,遠端開發機不固定,(還有缺錢買Pycharm專業版的...)
希望通過上面的介紹,大家能找到適合自己的開發工具。
本文來自部落格園,作者:CoderInCV,轉載請註明原文連結:https://www.cnblogs.com/haoliuhust/p/17555042.html