PyCharm遠(yuǎn)程調(diào)試配置流程

我們可能會(huì)在本地主機(jī)建立項(xiàng)目和編輯代碼,不過一些深度學(xué)習(xí)任務(wù)需要用到 GPU 硬件支持欲侮,這時(shí)我們需要把代碼在 SSH 遠(yuǎn)程服務(wù)器下運(yùn)行和調(diào)試威蕉。這種情況下韧涨,調(diào)試代碼虑粥,設(shè)置斷點(diǎn)和監(jiān)視變量值,就需要用到遠(yuǎn)程調(diào)試第晰。

遠(yuǎn)程調(diào)試是 PyCharm Professional 才支持的功能茁瘦,Pycharm Community Edtion 并不支持腹躁。在這個(gè)頁面下載 Pycharm Professional纺非。Professional 可以用有效的學(xué)生/教師身份申請于在校期間使用赘方。

在 Pycharm 界面窄陡,如果找不到某些菜單的位置跳夭,雙擊 shift 可以直接進(jìn)行全局搜索币叹。

配置遠(yuǎn)程服務(wù)器

為了令PyCharm能夠連接遠(yuǎn)程服務(wù)器颈抚,需要完成配置:1. 服務(wù)器地址贩汉、端口號(hào)匹舞、用戶名及密碼策菜;2. 服務(wù)器配置根文件夾和訪問它的URL地址;3. 項(xiàng)目的根文件夾翠霍、從項(xiàng)目根文件夾拷貝到服務(wù)器上的目標(biāo)文件夾零如、目標(biāo)文件夾的URL地址锄弱,這三者之間的映射關(guān)系会宪。[Official Guide]

1)建立連接

首先掸鹅,在本地打開項(xiàng)目巍沙,配置該項(xiàng)目對應(yīng)的遠(yuǎn)程服務(wù)器榔幸。在主菜單選擇 Tools -> Deployment -> Configuration 以打開 Deployment 菜單削咆。菜單左邊會(huì)顯示已保存的一些配置(如果之前沒有配置過則沒有)态辛,點(diǎn)擊左上角的 + 以新建一份配置。

先選擇文件傳輸協(xié)議(現(xiàn)在連服務(wù)器一般用的都是 SSH 協(xié)議编矾,所以選擇 SFTP窄俏,以下流程也是基于 SFTP 協(xié)議的凹蜈,使用其它協(xié)議還請參照上面給出的官方指引仰坦,而且目前只有 SSH 服務(wù)器可以實(shí)現(xiàn)遠(yuǎn)程調(diào)試功能)悄晃。選擇協(xié)議后彈出 Create new sever 對話框妈橄,為你的服務(wù)器起一個(gè)名字(不需要和用戶名相同)鼻种,OK 確認(rèn)叉钥。如果取消勾選 visible for only this project沼侣,則其之后他項(xiàng)目也可以直接使用這份配置。

配置服務(wù)器連接信息

在 SSH configuration 欄輸入連接參數(shù)轧膘,格式為“用戶名:密碼@地址:端口號(hào)”。最新的 PyCahrm 版本沒有 SSH configuration 欄蟆淀,而是把 Host熔任、Port疑苔、User Name兵迅、Password 這四項(xiàng)分開逐個(gè)填寫恍箭。之后點(diǎn)擊 Test Connection 測試連接,如果成功連接勉抓,會(huì)彈出 “Successfully connected to {address}”。沒成功的話隐圾,看看是不是連接參數(shù)哪里寫錯(cuò)了掰茶,用 MobaXterm 之類的其它軟件測試一下連接盐碱。[Official Guide]

Root path 為當(dāng)前用戶可見的最底層根目錄。如果想訪問任何地方暖混,填入“/”拣播。點(diǎn)擊后面的 Auto detect 會(huì)自動(dòng)切換到你選擇的用戶的根目錄。

2)建立本地文件到服務(wù)器的映射

如果你想建立多個(gè)映射關(guān)系剂跟,可以通過 Add new mapping 實(shí)現(xiàn)。[Official Guide]

建立完映射關(guān)系后辽剧,可以設(shè)置文件同步。這會(huì)使 PyCharm 在能連接上服務(wù)器時(shí),自動(dòng)同步你的代碼等文件到服務(wù)器端诀紊。設(shè)置文件同步的方法如下:

選擇 Tools ->?Deployment -> Automatic Upload为居,并在彈出的選框中選擇剛才設(shè)置的服務(wù)器配置蒙畴。之后再打開 Tools -> Deployment,會(huì)看到 Automatic Upload 前面打了個(gè)勾干跛,并且后面標(biāo)注有(Always)楼入,再次點(diǎn)擊便可取消扬舒。實(shí)際上,Always 代表,不論是 Pycharm 自動(dòng)保存還是用戶用 Ctrl + S 手動(dòng)保存,都同時(shí)將文件同步到服務(wù)器端瞄勾,如果想切換成 On explicit save action(只在用戶手動(dòng)保存的時(shí)候同步)弥激,參考[Official Guide]进陡。

Pycharm 只能靜默地同步文件內(nèi)容,不能靜默地新建文件秆撮,所以在設(shè)置好這些之后四濒,會(huì)發(fā)現(xiàn)服務(wù)器上的映射文件夾還是空的。需要先手動(dòng)上傳一次职辨,在 PyCharm 左側(cè)的瀏覽欄中盗蟆,右鍵點(diǎn)擊文件或文件夾并選擇 Upload to {sever name} 以將其內(nèi)容上傳至服務(wù)器對應(yīng)的文件夾。之后每當(dāng)編輯本地項(xiàng)目里的文件內(nèi)容時(shí)舒裤,服務(wù)器上該文件的內(nèi)容會(huì)自動(dòng)同步喳资。

如果之后新建了文件或者文件夾,發(fā)現(xiàn) PyCharm 沒有自動(dòng)同步腾供,也這樣手動(dòng)同步就好仆邓。目前看來可能直接在 PyCharm 的界面里新建的文件會(huì)同步,通過 windows 的文件管理系統(tǒng)復(fù)制過去的不會(huì)同步伴鳖。

如果項(xiàng)目文件夾下有些文件不想同步节值,再次打開 Tools -> Deployment -> Configuration,在上方選擇 Excluded Paths榜聂,可以設(shè)置不想同步的文件或文件夾搞疗。可以通過正則表達(dá)式指定這些文件/文件夾须肆,以“;”為分隔符匿乃,“*”指代任意數(shù)量的字符,“豌汇?”指代一個(gè)字符幢炸。不過只要一開始不上傳到服務(wù)器,這些文件也不會(huì)被同步拒贱。

另外宛徊,可以在 Pycharm 主界面右側(cè)找到 Remote Host 標(biāo)簽(或Tool -> Deployment -> Browse Remote Host)佛嬉,點(diǎn)擊以展開。默認(rèn)的服務(wù)器可能是<None>闸天,點(diǎn)擊右邊小箭頭選擇服務(wù)器配置以連接剛才設(shè)置的服務(wù)器巷燥,然后就可以在這里瀏覽服務(wù)器上的文件了。

這次配置好号枕,之后就不用重復(fù)配置了。新的項(xiàng)目連接到相同的服務(wù)器時(shí)陨享,只要在 Tools -> Deployment -> Configuration 里選擇已有的服務(wù)器設(shè)置葱淳,改一下映射路徑即可。

配置遠(yuǎn)程 Python 解釋器

盡管代碼在本地主機(jī)上抛姑,我們需要使用服務(wù)器上的 Python 解釋器來執(zhí)行它赞厕。[Official Guide]

選擇 File -> Settings -> Project:{project name} -> Project Interpreter,以顯示本地項(xiàng)目當(dāng)前應(yīng)用的解釋器定硝,如果未選擇皿桑,則為<No Interpreter>。點(diǎn)擊右邊的設(shè)置鍵(齒輪)選擇 Add 以打開 Add Python Interpreter 窗口蔬啡,選擇 SSH Interpreter 并選擇 Existing sever configuration诲侮,選擇剛才設(shè)好的服務(wù)器設(shè)置。

新增遠(yuǎn)程 SSH 解釋器

點(diǎn)擊 Next 進(jìn)入下個(gè)界面箱蟆,現(xiàn)在選擇遠(yuǎn)程 Python 解釋器沟绪,在 Interpreter 欄內(nèi)輸入解釋器的路徑】詹拢可以勾選 Execute code using this interpreter with root privileges via sudo绽慈,這將會(huì)讓代碼以root權(quán)限執(zhí)行,如果勾選了辈毯,之后會(huì)有一個(gè)對話框讓你輸入 root 密碼坝疼。在下面的 Sync folders 選擇本地項(xiàng)目文件同步的文件夾。

選擇同步文件夾這一步之前已經(jīng)為 Deployment 設(shè)置過了谆沃,這次是為 Debugger 選擇钝凶,應(yīng)選擇和之前相同的路徑。

設(shè)置解釋器路徑

點(diǎn)擊 Finish管毙,可以看到現(xiàn)在這個(gè)項(xiàng)目的解釋器已經(jīng)被設(shè)為了 SSH 遠(yuǎn)程解釋器腿椎。正常的話, PyCharm 會(huì)識(shí)別出這個(gè)環(huán)境下的所有包夭咬,并將它們列出來啃炸。

成功設(shè)置解釋器

如果新的項(xiàng)目需要用到這個(gè)解釋器,只要在 File -> Settings -> Project: {project name} -> Interpreter 中選擇已有的解釋器卓舵,并更改映射文件夾路徑即可南用。

好耶

現(xiàn)在,項(xiàng)目內(nèi)的代碼已經(jīng)可以在遠(yuǎn)程服務(wù)器上調(diào)試了」妫可以試著打幾個(gè)斷點(diǎn)肿嘲,調(diào)試一下,監(jiān)視以下變量筑公,這些都是可以做到的雳窟。Pycharm的遠(yuǎn)程調(diào)試配置就完成了。

注意事項(xiàng)

遠(yuǎn)程調(diào)試過程中發(fā)現(xiàn)的一些小問題匣屡,每次發(fā)現(xiàn)就慢慢補(bǔ)充吧封救。

1. cv2.imshow()報(bào)錯(cuò)

由于是遠(yuǎn)程運(yùn)行,cv2.imshow() 無法正常工作捣作。報(bào)錯(cuò):qt.qpa.xcb: could not connect to display. qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "{path-to-environment}/lib/python3.8/site-packages/cv2/qt/plugins" even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. 目前未解決誉结,只能先不用 imshow 了,想看圖的話就 imwrite 保存下來再看吧券躁。

2. 調(diào)試時(shí)加載不出變量值

如果用到 pytorch惩坑,代碼在調(diào)試時(shí)或許會(huì)加載不出一些帶 tensor 的變量的值,顯示 Timeout waiting for response on 113也拜、Loading timeout 或者 Failed collecting data 之類的以舒。雖然不清楚發(fā)生這個(gè)問題的原理,但是按下面的做應(yīng)該可以解決:在 File -> Settings -> Build, Excution, Deployment -> Debugger -> Python Debugger 里勾選 Gevent Compatible搪泳。我用這個(gè)方法能夠解決上述問題稀轨,具體參考?stackoverflow 上的這個(gè)問題的回答。

另外岸军,勾選 Gevent Compatible 可能會(huì)導(dǎo)致一些其它問題奋刽,所以確保你是僅對這個(gè)項(xiàng)目勾選了。如果之后項(xiàng)目改用本地解釋器艰赞,可能需要取消勾選?Gevent Compatible佣谐,否則可能會(huì)發(fā)生其他文件里的斷點(diǎn)失效的問題。

3. matpoltlib.pyplot 創(chuàng)建 figure 報(bào)錯(cuò)

這個(gè)報(bào)錯(cuò)應(yīng)該是 tkinter.TclError: couldn't connect to display方妖。發(fā)生這種錯(cuò)誤不是因?yàn)檫h(yuǎn)程調(diào)試狭魂,而是因?yàn)橐话惴?wù)器沒有窗口化顯示的需求,所以沒有 xming 圖形化顯示模塊党觅。matplotlib 默認(rèn)使用該模塊雌澄。

解決方法,在程序首部插入以下代碼杯瞻,以切換圖形化顯示模塊:

```

import matplotlib

matplotlib.use("Agg")

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镐牺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子魁莉,更是在濱河造成了極大的恐慌睬涧,老刑警劉巖募胃,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畦浓,居然都是意外死亡痹束,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門讶请,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祷嘶,“玉大人,你說我怎么就攤上這事夺溢∧ㄊ矗” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵企垦,是天一觀的道長。 經(jīng)常有香客問我晒来,道長钞诡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任湃崩,我火速辦了婚禮荧降,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攒读。我一直安慰自己朵诫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布薄扁。 她就那樣靜靜地躺著剪返,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邓梅。 梳的紋絲不亂的頭發(fā)上脱盲,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音日缨,去河邊找鬼钱反。 笑死,一個(gè)胖子當(dāng)著我的面吹牛匣距,可吹牛的內(nèi)容都是我干的面哥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毅待,長吁一口氣:“原來是場噩夢啊……” “哼尚卫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恩静,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤焕毫,失蹤者是張志新(化名)和其女友劉穎蹲坷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邑飒,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡循签,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疙咸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片县匠。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖撒轮,靈堂內(nèi)的尸體忽然破棺而出乞旦,到底是詐尸還是另有隱情,我是刑警寧澤题山,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布兰粉,位于F島的核電站,受9級(jí)特大地震影響顶瞳,放射性物質(zhì)發(fā)生泄漏玖姑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一慨菱、第九天 我趴在偏房一處隱蔽的房頂上張望焰络。 院中可真熱鬧,春花似錦符喝、人聲如沸闪彼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畏腕。三九已至,卻和暖如春茉稠,著一層夾襖步出監(jiān)牢的瞬間郊尝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國打工战惊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留流昏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓吞获,卻偏偏與公主長得像况凉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子各拷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355