PyCharm 遠程調試

FraPaquette 8年前發布 | 20K 次閱讀 虛擬化 PyCharm Python開發

公司要用Python開發一個基于Linux的系統,我是不可能忍受把我的“高端Mac”換成矮挫丑的Linux的(更何況還要考慮團隊中有很多同事用Windows)。借助PyCharm的遠程調試可以實現“本地寫代碼,遠程Debug”

配置PyCharm遠程調試

 

選擇Project Interpreter的時候我們是可以選擇“Add Remote”

打開之后是一片“新大陸”

我們先通過SSH配置,輸入服務器的地址,賬號密碼,勾選 服務器端的Python路徑 。確定之后PyCharm會把在遠程機器上安裝Python Helpers(默認安裝在Home目錄下的.pycharm_helpers,比如我用的是fireflyc所以目錄是/home/fireflyc/.pycharm_helpers)。

這里最關鍵的一個步驟——Path Maping。它是本地路徑和服務器路徑的映射關系,當我們在本地執行Debug的時候代碼其實是在遠程Linux上執行的,這必須解決一個問題——如何把代碼同步到遠程Linux上。最簡單的辦法是通過VMware裝一個虛擬機,用"文件共享"的方式。

設置完成后需要在Path Maping中新增映射關系

LocalPath是工程的根目錄,Remote Path是共享文件夾所在目錄

執行一下,“如絲般順滑”,還能打斷點。

遠程調試的原理

 

遠程調試不是什么黑魔法,它是IDE工具發展的一種傾向——細分前端和后端。前端偏向于完成代碼編輯、呈現工作相當于設置一個框架;后端則是針對某個語言的語法加亮、代碼提示、自動完成、代碼格式化、調試。比如visual code在這一點上表現的就非常明顯,VSC只提供了一個“編輯器”的功能,每個語言的加亮、代碼提示、格式化、調試都是通過“插件”實現的。這個插件不是傳統意義上的“靜態”的,而是一個獨立的進程。visual code稱這個為language server,并且制定了一個Language Server Protocol的規范。有興趣的朋友可以去看一下或者嘗試自己寫一個插件。 PyCharm還沒有這么徹底,它只是把Debug部分做成一個單獨的Server。去看一下“神秘”的.pycharm_helpers就一目了然了

PyCharm遠程調試的時候我們偷偷的看一下進程

真相大白了。原理其實很簡單,調試的時候PyCharm通過SSH執行遠程Linux上的pydev,這個進程會執行本地的python代碼。pydev和Pycharm會有網絡通訊用來傳遞“打斷點、取消斷點、單步執行”之類的調試動作,端口是——45140。

 

自動化開發環境

 

解決了遠程調試的問題后順帶可以解決一下“開發環境”的問題;每個人都去新建一臺虛擬機會比較麻煩,最后可能選擇的發行版本千奇百怪。所以通過vagrant來管理“開發虛擬機”是一種很好的實踐。

這段腳本會生成一個ubuntu/trusty64鏡像的虛擬機(ubuntu 14),使用的是virtualbox;把虛擬機的8000端口映射成本機的8000端口;設置共享目錄(我的Vagrantfile在工程根目錄下的dev文件夾,所以../其實就是工程根目錄);設置虛擬機第一次啟動的時候執行的腳本(會設置軟件的源,關閉防火墻之類的) 通過上面的配置整個開發環境就自動化了,開發人員拿到代碼之后執行切換到dev目錄下執行vagrant up,然后選擇

PathMapping系統會為我們自動添加上(根據vagrantfile的配置)

Vagrant小結

 

Vagrant是一個定義虛擬機的配置工具,你可以用一段Ruby腳本設置自己虛擬機的大小、配置、使用的虛擬化軟件,之后執行 vagrant up 就會自動創建出一臺虛擬機。 Vagrant會自動生成一個vagrant的用戶同時生成一對SSH密鑰,私鑰會放在.vagrant文件夾下(執行vagrant up后會看到有一個.vagrant文件夾的)。我們執行vagrant ssh xxx的時候會自動使用這個私鑰登錄。所以PyCharm的配置其實還是通過SSH,原理并沒有變。

關于Docker

 

PyCharm還支持Docker,但是我覺得這個并沒有什么用。在MacOS、Windows上Docker其實是先啟動一臺虛擬機里面裝上Linux然后在里面裝Docker。

總結

 

遠程調試其實只有兩個要點,pydev幫我們解決了遠程斷點、啟動的問題;我們自己要解決代碼同步的問題。文章都是用虛擬機來做開發環境的,你也可以用一臺公用的機器來做開發環境。這種情況下你就必須用下面的方式開啟文件同步了。

最后補充一點,我推薦用vagrant的方式它可以幫我們“規范化虛擬機”;如果你開發的程序必須用root啟動(vagrant是用vagrant用戶啟動的)那么只能用ssh了。(我們也可以只讓vagrant幫我們生成虛擬機,我們自己進去修改root的密碼,然后通過ssh連接進去。)

 

來自:http://mp.weixin.qq.com/s?__biz=MzIxMjAzMDA1MQ==&mid=2648945693&idx=1&sn=a7f1542679ab66cb88165b683e4f4b00&chksm=8f5b5311b82cda0726d3afa08411e531bb95f4bc492ab0fa6f1923f82bd5bde9e1299acad1a4

 

 本文由用戶 FraPaquette 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!