亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

使用 PyCharm 進行遠程調試

前面幾小節了介紹如何在 PyCharm 運行與調試程序,在實際工作中,我們可能還會遇到下列問題,比如做大數據分析或者機器學習過程中本地機器性能不足,有時候 Python 應用的代碼在本地開發環境運行十分正常,但是放到線上以后卻出現了莫名其妙的異常,在服務器系統上安裝一個 IDE 肯定是不現實的,那么,是否可以將開發環境中的 IDE 與服務器環境相連,實現利用開發環境的 IDE 調試服務器環境中運行的程序呢? 答案是肯定的,這就是遠程調試(Remote Debug)。PyCharm 提供了兩種方式進行遠程調試,下面將分別介紹。

1. 準備一個項目

在本地計算機上,創建一個純 Python 項目,此項目添加 一個Python 文件, 將以下代碼添加到 Python 文件,并命名為 sort.py

def bubble_sort(arr):
    n = len(arr)

    # 遍歷所有數組元素
    for i in range(n):

        # Last i elements are already in place
        for j in range(0, n - i - 1):

            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr


if __name__ == '__main__':

    arr = [64, 34, 25, 12, 22, 11, 90]
    print(arr)
    new_arr = bubble_sort(arr)
    print(new_arr)

2. 使用遠程解釋器進行遠程調試

運行應用程序的機器被引用為本地計算機,具有遠程解釋器的計算機被引用為遠程計算機。

2.1 配置遠程解釋器

1. 確保 ssh 可以正常訪問遠程計算機。

2. 在 Preference/Settings,向項目添加新的遠程解釋器,如使用 SSH 指定,輸入 IP 地址,用戶名,然后 Next。
圖片描述

輸入密碼,然后下一步:

圖片描述
選擇遠程計算機中 Python 路徑,同時可以指定本地與遠程同步路徑。

圖片描述
點擊 OK,可以看到對應的解釋器路徑與同步路徑 ,點擊 OK
圖片描述
下面演示一下配置遠程解釋器的完整過程。

圖片描述

Tips: 如果選擇自動同步文件,在設置窗口關閉后,會自動登錄遠程 server, 輸入密碼,文件傳輸工具窗口將打開,顯示傳輸的文件。

3. 為項目創建遠程解釋器后,將自動創建相應的部署配置。若要預覽它, Preference/Settings -> Build,Execution,Deployment -> Deployment。這里新建了一個新的 SFTP 連接。

圖片描述
點擊 mapping 選項卡,可以看到本地項目到遠程服務器目錄映射。

圖片描述

2.2 將應用程序部署到遠程主機

在 Tool 菜單上,選擇 Deployment -> Upload to 連接名。將顯示文件傳輸工具窗口。如果配置遠程解釋器時沒有選擇自動同步文件,或者當文件有更新,可以通過這種方式上傳文件。

圖片描述
點擊如圖的 Browse Remote Host 可以顯示服務器上的相關目錄:

圖片描述
然后查看遠程映射目錄,文件已經成功。

圖片描述

2.3 調試程序

單擊編輯器邊欄綠色箭頭,選擇 Debug sort, 查看調試輸出。請注意,調試實際上發生在指定的遠程服務器上。
圖片描述

3. 使用 Python 遠程調試服務器配置進行遠程調試

3.1 創建 run/debug 配置

主菜單選擇 Run -> Edit Configuration , 打開 Run/debug configurations 窗口, 在工具欄選擇 + 從選擇列表選擇 Python Debug Server。

圖片描述

在遠程機器上安裝包 pydevd-pycharm , 除了直接通過 pip 直接安裝,還可找到本地 PyCharm 安裝路徑下的 pydevd-pycharm.egg (mac: /Applications/PyCharm.app/Contents/debug-eggs/pydevd-pycharm.egg),拷貝這個文件到遠程服務器,然后遠程終端窗口執行 sudo easy_install pydevd-pycharm.egg。

腳本要加兩行代碼

import pydevd_pycharm

pydevd_pycharm.settrace('192.168.3.14', port=12345, stdoutToServer=True,
                        stderrToServer=True)

圖片描述

Tips:語句 import pydevd_pycharm 下面出現紅色波浪線,是說明本地沒有安裝這個包,在這里不用管這個警告信息,因為這個腳本是要上傳遠程 server 調試的,遠程 server 安裝這個包就可以了。

3.2 創建 SFTP 連接

主菜單選擇: Tools -> Deployment -> Configuration, 在前面我們已經創建一個連接,繼續使用這個,也可以點擊 + 號創建新的連接,輸入遠程 IP,用戶名與密碼即可。點擊 Test Connection, 確保當前與遠程服務器連通的。

圖片描述

3.3 上傳腳本文件到遠程服務器

在本地計算機上,在 project 工具窗口中,選擇文件,右鍵單擊選擇并選擇 Deployment -> upload to 遠程連接名,然后查看 Fi 檢查文件傳輸對話框窗口,確保本地計算機中的文件上載到遠程服務器。

圖片描述

3.4 登錄 debug server

選擇第一步創建的 運行/調試 配置, 點擊 debug 按鈕, 查看 debug console 輸出信息

圖片描述

3.5 遠程終端執行腳本

在遠程計算機中啟動應用程序,當執行到 pydevd.settrace 語句時,便會與本地開發環境中的 PyCharm建立通訊連接了。

cd /tmp/pycharm_project_986   # 訪問遠程映射的目錄
python sort.py  # 運行程序,用python還是python3 根據自己的環境選擇,筆者環境已經為python3建立了軟鏈接

3.6 調試程序

在本地計算機上,切換到 debug 工具窗口。顯示與 pydev 調試器的連接,這樣代碼實際上是在遠程主機上執行的,但在本地計算機上調試。

圖片描述
最后, 演示一下從上傳文件到調試的過程。
圖片描述

4. 小結

本小節介紹了兩種遠程調試的方式,二者都需要創建 SFTP 連接,都需要把程序文件上傳到遠程 server, 它們最大的不同是,第一種方法是在本地 PyCharm 啟動程序的,需要配置遠程解釋器;第二種方法是在遠程 server 啟動程序的,需要配置 python debug server 。具體選擇哪種方式進行遠程調試,請根據實際的工作環境選擇。

圖片描述