使用 PyCharm 進(jìn)行遠(yuǎn)程調(diào)試
前面幾小節(jié)了介紹如何在 PyCharm 運(yùn)行與調(diào)試程序,在實(shí)際工作中,我們可能還會(huì)遇到下列問(wèn)題,比如做大數(shù)據(jù)分析或者機(jī)器學(xué)習(xí)過(guò)程中本地機(jī)器性能不足,有時(shí)候 Python 應(yīng)用的代碼在本地開(kāi)發(fā)環(huán)境運(yùn)行十分正常,但是放到線上以后卻出現(xiàn)了莫名其妙的異常,在服務(wù)器系統(tǒng)上安裝一個(gè) IDE 肯定是不現(xiàn)實(shí)的,那么,是否可以將開(kāi)發(fā)環(huán)境中的 IDE 與服務(wù)器環(huán)境相連,實(shí)現(xiàn)利用開(kāi)發(fā)環(huán)境的 IDE 調(diào)試服務(wù)器環(huán)境中運(yùn)行的程序呢? 答案是肯定的,這就是遠(yuǎn)程調(diào)試(Remote Debug)。PyCharm 提供了兩種方式進(jìn)行遠(yuǎn)程調(diào)試,下面將分別介紹。
1. 準(zhǔn)備一個(gè)項(xiàng)目
在本地計(jì)算機(jī)上,創(chuàng)建一個(gè)純 Python 項(xiàng)目,此項(xiàng)目添加 一個(gè)Python 文件, 將以下代碼添加到 Python 文件,并命名為 sort.py
:
def bubble_sort(arr):
n = len(arr)
# 遍歷所有數(shù)組元素
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. 使用遠(yuǎn)程解釋器進(jìn)行遠(yuǎn)程調(diào)試
運(yùn)行應(yīng)用程序的機(jī)器被引用為本地計(jì)算機(jī),具有遠(yuǎn)程解釋器的計(jì)算機(jī)被引用為遠(yuǎn)程計(jì)算機(jī)。
2.1 配置遠(yuǎn)程解釋器
1. 確保 ssh 可以正常訪問(wèn)遠(yuǎn)程計(jì)算機(jī)。
2. 在 Preference/Settings,向項(xiàng)目添加新的遠(yuǎn)程解釋器,如使用 SSH 指定,輸入 IP 地址,用戶(hù)名,然后 Next。
輸入密碼,然后下一步:
選擇遠(yuǎn)程計(jì)算機(jī)中 Python 路徑,同時(shí)可以指定本地與遠(yuǎn)程同步路徑。
點(diǎn)擊 OK,可以看到對(duì)應(yīng)的解釋器路徑與同步路徑 ,點(diǎn)擊 OK
下面演示一下配置遠(yuǎn)程解釋器的完整過(guò)程。
Tips: 如果選擇自動(dòng)同步文件,在設(shè)置窗口關(guān)閉后,會(huì)自動(dòng)登錄遠(yuǎn)程 server, 輸入密碼,文件傳輸工具窗口將打開(kāi),顯示傳輸?shù)奈募?/p>
3. 為項(xiàng)目創(chuàng)建遠(yuǎn)程解釋器后,將自動(dòng)創(chuàng)建相應(yīng)的部署配置。若要預(yù)覽它, Preference/Settings -> Build,Execution,Deployment -> Deployment。這里新建了一個(gè)新的 SFTP 連接。
點(diǎn)擊 mapping 選項(xiàng)卡,可以看到本地項(xiàng)目到遠(yuǎn)程服務(wù)器目錄映射。
2.2 將應(yīng)用程序部署到遠(yuǎn)程主機(jī)
在 Tool 菜單上,選擇 Deployment -> Upload to 連接名
。將顯示文件傳輸工具窗口。如果配置遠(yuǎn)程解釋器時(shí)沒(méi)有選擇自動(dòng)同步文件,或者當(dāng)文件有更新,可以通過(guò)這種方式上傳文件。
點(diǎn)擊如圖的 Browse Remote Host 可以顯示服務(wù)器上的相關(guān)目錄:
然后查看遠(yuǎn)程映射目錄,文件已經(jīng)成功。
2.3 調(diào)試程序
單擊編輯器邊欄綠色箭頭,選擇 Debug sort, 查看調(diào)試輸出。請(qǐng)注意,調(diào)試實(shí)際上發(fā)生在指定的遠(yuǎn)程服務(wù)器上。
3. 使用 Python 遠(yuǎn)程調(diào)試服務(wù)器配置進(jìn)行遠(yuǎn)程調(diào)試
3.1 創(chuàng)建 run/debug 配置
主菜單選擇 Run -> Edit Configuration
, 打開(kāi) Run/debug configurations 窗口, 在工具欄選擇 + 從選擇列表選擇 Python Debug Server。
在遠(yuǎn)程機(jī)器上安裝包 pydevd-pycharm , 除了直接通過(guò) pip 直接安裝,還可找到本地 PyCharm 安裝路徑下的 pydevd-pycharm.egg (mac: /Applications/PyCharm.app/Contents/debug-eggs/pydevd-pycharm.egg),拷貝這個(gè)文件到遠(yuǎn)程服務(wù)器,然后遠(yuǎn)程終端窗口執(zhí)行 sudo easy_install pydevd-pycharm.egg
。
腳本要加兩行代碼
import pydevd_pycharm
pydevd_pycharm.settrace('192.168.3.14', port=12345, stdoutToServer=True,
stderrToServer=True)
Tips:語(yǔ)句 import pydevd_pycharm 下面出現(xiàn)紅色波浪線,是說(shuō)明本地沒(méi)有安裝這個(gè)包,在這里不用管這個(gè)警告信息,因?yàn)檫@個(gè)腳本是要上傳遠(yuǎn)程 server 調(diào)試的,遠(yuǎn)程 server 安裝這個(gè)包就可以了。
3.2 創(chuàng)建 SFTP 連接
主菜單選擇: Tools -> Deployment -> Configuration, 在前面我們已經(jīng)創(chuàng)建一個(gè)連接,繼續(xù)使用這個(gè),也可以點(diǎn)擊 + 號(hào)創(chuàng)建新的連接,輸入遠(yuǎn)程 IP,用戶(hù)名與密碼即可。點(diǎn)擊 Test Connection, 確保當(dāng)前與遠(yuǎn)程服務(wù)器連通的。
3.3 上傳腳本文件到遠(yuǎn)程服務(wù)器
在本地計(jì)算機(jī)上,在 project 工具窗口中,選擇文件,右鍵單擊選擇并選擇 Deployment -> upload to 遠(yuǎn)程連接名
,然后查看 Fi 檢查文件傳輸對(duì)話框窗口,確保本地計(jì)算機(jī)中的文件上載到遠(yuǎn)程服務(wù)器。
3.4 登錄 debug server
選擇第一步創(chuàng)建的 運(yùn)行/調(diào)試 配置, 點(diǎn)擊 debug 按鈕, 查看 debug console 輸出信息
3.5 遠(yuǎn)程終端執(zhí)行腳本
在遠(yuǎn)程計(jì)算機(jī)中啟動(dòng)應(yīng)用程序,當(dāng)執(zhí)行到 pydevd.settrace 語(yǔ)句時(shí),便會(huì)與本地開(kāi)發(fā)環(huán)境中的 PyCharm建立通訊連接了。
cd /tmp/pycharm_project_986 # 訪問(wèn)遠(yuǎn)程映射的目錄
python sort.py # 運(yùn)行程序,用python還是python3 根據(jù)自己的環(huán)境選擇,筆者環(huán)境已經(jīng)為python3建立了軟鏈接
3.6 調(diào)試程序
在本地計(jì)算機(jī)上,切換到 debug 工具窗口。顯示與 pydev 調(diào)試器的連接,這樣代碼實(shí)際上是在遠(yuǎn)程主機(jī)上執(zhí)行的,但在本地計(jì)算機(jī)上調(diào)試。
最后, 演示一下從上傳文件到調(diào)試的過(guò)程。
4. 小結(jié)
本小節(jié)介紹了兩種遠(yuǎn)程調(diào)試的方式,二者都需要?jiǎng)?chuàng)建 SFTP 連接,都需要把程序文件上傳到遠(yuǎn)程 server, 它們最大的不同是,第一種方法是在本地 PyCharm 啟動(dòng)程序的,需要配置遠(yuǎn)程解釋器;第二種方法是在遠(yuǎn)程 server 啟動(dòng)程序的,需要配置 python debug server 。具體選擇哪種方式進(jìn)行遠(yuǎn)程調(diào)試,請(qǐng)根據(jù)實(shí)際的工作環(huán)境選擇。