1. 程式人生 > >PyCharm進行遠端開發和除錯

PyCharm進行遠端開發和除錯

你是否經常要在Windows 7或MAC OS X上面開發Python或Web應用程式,但是它們最後需要在linux上面來執行呢? 我們經常會碰到開發時沒有問題但是到了正式的Linux環境下面卻出現問題。那麼怎樣保證開發環境跟執行環境的一致呢?

通常有兩種方法解決。一種是使用PyCharm內建支援的Vagrant,這個教程可以參考Vagrant開發環境配置。 不過很遺憾的是我自己在試驗過程中啟動VirtualBox虛擬機器時候老是報錯,暫時還沒解決,讀者可以自己試著測試看行不行。 第二種方式就是通過PyCharm的遠端直譯器加上檔案同步功能,實現本地編輯程式碼->同步到伺服器->通過遠端debug來除錯測試程式。目前我選擇的是第二種,雖然比第一種更笨拙點。

遠端除錯的功能在Eclipse、IntelliJ IDEA等大型IDE中均有支援,實現原理都基本相同,這裡採用PyCharm進行說明。

遠端伺服器的同步配置

遠端伺服器IP地址192.168.203.95,開啟ssh服務,安裝python版本2.7。我用一個在PyCharm裡面的core-python專案來做演示。

首先我們需要配置PyCharm通伺服器的程式碼同步,開啟Tools | Deployment | Configuration

點選左邊的“+”新增一個部署配置,輸入名字,型別選SFTP

確定之後,再配置遠端伺服器的ip、埠、使用者名稱和密碼。root path是檔案上傳的根目錄,注意這個目錄必須使用者名稱有許可權建立檔案。

然後配置對映,local path是你的工程目錄,就是需要將本地這個目錄同步到伺服器上面,我填的是專案根目錄。 Deploy path on server 這裡填寫相對於root path的目錄,下面那個web path不用管先

如果你還有一些檔案或資料夾不想同步,那麼在配置對話方塊的第三個tab頁“Excluded path”裡面新增即可,可同時指定本地和遠端。

還有一個設定,開啟Tools | Deployment | Options,將”Create Empty directories”打上勾,要是指定的資料夾不存在,會自動建立。

上傳和下載檔案

有幾種方法可以實現本地和遠端檔案的同步,手動和當檔案儲存後自動觸發。這裡我選擇了手動,因為自動觸發比如影響效能,PyCharm會卡,感覺不爽。

手動上傳方式很簡單,選擇需要同步的檔案或資料夾,然後選擇 Tools | Deployment | Upload to sftp(這個是剛剛配置的部署名稱)

下載檔案也是一樣,選擇 Tools | Deployment | Download from sftp

比較遠端和本地檔案

有時候你並不確定遠端和本地版本的完全一致,需要去比較看看。PyCharm提供了對比檢視來為你解決這個問題。

選擇Tools | Deployment | Browse Remote Host,開啟遠端檔案檢視,在右側視窗就能看到遠端主機中的檔案

選擇一個你想要對比的資料夾,點選右鍵->Sync with Local,開啟同步對比視窗,使用左右箭頭來同步內容。

上面是伺服器與本地對比,那麼本地檔案通伺服器對比,就先在PyCharm裡面選擇檔案或資料夾,然後右鍵->Deployment->Sync with deployed to即可

PyCharm遠端除錯

在PyCharm中進行遠端除錯有兩種選擇:

  1. 使用遠端的直譯器
  2. 使用Python除錯伺服器

這裡簡單起見我只演示第一種,使用遠端直譯器,也就是使用伺服器上面安裝的python直譯器。

配置遠端Python直譯器

選擇File | Settings,選擇Project | Project Interpreter,然後在右邊,點選那個小齒輪設定,如下

然後點選”Add Remote”,填寫主機的ssh配置

如果之前配置過SFTP的話就直接選“Deployment configuration”,然後選擇剛剛的模板名稱就可以了,由於我上面配置過就直接選模板, 這裡請仔細看我的Python直譯器是虛擬環境virtualenv,這個要在伺服器上面先建立好虛擬環境。

開始除錯

完成之後選擇這個遠端的直譯器作為工程的直譯器即可,然後配置一個執行例項,打斷點除錯。 這裡我以另外一個django工程為例來說明,名字為zspace,因為用一個web工程來說明更具代表性。

選擇“Run/Debug Configuration”,新增一個“Django server”,然後配置像下面這樣寫請注意圖中標出的幾個點,具體什麼意思就不用多解釋了吧,^_^

然後你就可以像本地除錯一樣打斷點做除錯了。這個步驟太簡單就不截圖了,記得修改原始碼後同步到伺服器繼續下一次的除錯。