Pycharm中SSH、SFTP連接遠程服務(wù)器編輯調(diào)試實例
需求分析
我目前的需求是將代碼部署在服務(wù)器上,使用Pycharm的SSH連接Linux服務(wù)器,用Pycharm的友好界面遠程運行服務(wù)器上的Python項目,并且可以對其進行修改。
本篇文章查閱了大量的資料,并希望把整個的流程以及錯誤處理描述的比較全面。
注意:本文章適用于Pycharm的專業(yè)版,免費的社區(qū)版本沒有遠程連接的功能。
SFTP配置
首先第一步來配置SFTP,很多教程在這一步先來設(shè)置SSH,SSH設(shè)置比較簡單,但是Pycharm在設(shè)置完SSH后只能擔當XShell等軟件的角色,并不能滿足我們剛才提出的需求(比如說要查看整個項目文件列表并把Python文件展示在Pycharm中),所以第一步我們先來設(shè)置SFTP。
創(chuàng)建一個新的Pycharm項目
在最開始做這件事的時候我并不知道本地項目和遠程項目的關(guān)系,為了事實上Pycharm在這里把本地的項目和遠程的項目做了一個映射的關(guān)系,通過這些配置,我們既可以把服務(wù)器項目的文件拉取到本地項目中,也可以把本地項目的文件上傳到服務(wù)器項目中,所以為了方便演示,我們創(chuàng)建一個新的項目,這個項目我把他叫做Pycharm_Remote
。
如圖所示,我們在本地創(chuàng)建一個最基本的純Python項目,如果您不清楚具體的過程,可以在搜索引擎中搜索Pycharm 創(chuàng)建項目
關(guān)鍵字來查找教程。
創(chuàng)建項目中使用的Python環(huán)境可以先設(shè)置為我們本地的Python環(huán)境。
創(chuàng)建SFTP相關(guān)配置
在導航欄部分找到Tools→Deployment→Configuration
在彈出的窗口中點擊左上角加號,選擇SFTP
輸入你想給這個鏈接起的名字
點擊OK,在新出來的頁面中創(chuàng)建一個新的SSH連接,點擊三個點,然后點擊加號,輸入一個新的SSH連接。
其中Visible only for this project指的是是否在不同項目中共享這個SFTP配置,可以按需開啟,在SSH設(shè)置中輸入服務(wù)器的IP地址,以及相應的用戶名,就如同在XShell中連接服務(wù)器那樣。
我們可以測試連接,測試成功后點擊OK后回到配置SFTP的界面。
如果是使用Windows連接Linux的話,最好可以把Advanced中的編碼從GBK改成UTF-8,這樣在報錯的時候如果服務(wù)器那邊返回的是中文的錯誤,Windows這邊就不會顯示亂碼而找不到原因所在(血淚教訓),而且如果遇到中文數(shù)據(jù)文件什么的與服務(wù)器也好溝通。
接下來我們配置比較關(guān)鍵的一個環(huán)節(jié),需要配置Root Path,這個字段的意思是遠程服務(wù)器的根路徑,比如說我把他設(shè)置為/home/a/
,那就意味著我們把a
這個文件夾當做了Pycharm所檢測的根路徑,將來的項目必須在a
這個文件夾下面Pycharm才能檢測得到。
這里還有一個Autodetect的選項,他會自動選擇主目錄下的用戶文件夾作為Root Path,如/home/xiaoming/
,大家按需所取即可。
如上圖所示,我們配置了SFTP的所有Connection部分,接下來來到Mapping部分,這部分的用處是將我們本地的文件夾和服務(wù)器上的項目文件夾聯(lián)系映射起來,所以這個地方我們要填入的是我們的項目文件夾,而這里要注意的是要填入相對于Root Path的路徑,而不是絕對路徑,
比如說我在Root Path部分填入的路徑是/nfs/users/xiaoming/jinrong_project
而我真正的項目的絕對路徑是/nfs/users/xiaoming/jinrong_project/Finance_Data
這時候我在Mapping的Deployment Path中填入的就是/Finance_Data
第一行的Local Path默認是我們的項目文件夾所在的本地目錄。
點擊OK,至此我們的SFTP配置就結(jié)束了,這時我們可以看項目的右下角展現(xiàn)了我們剛才的配置名稱server2。
這時我們可以在導航欄找到Tools→Deployment→Browse Remote Host,在右邊就會出現(xiàn)剛才設(shè)置的Root Path下的所有文件。(如沒有出現(xiàn),見需要注意的問題)
我們選擇相應的文件,雙擊就可以展現(xiàn)出來了
這個時候我們可以對其進行編輯,在導航欄找到Tools→Deployment→Automatic Upload,打開,這時候我們對文件的更改就會自動上傳到服務(wù)器上
這時我們已經(jīng)可以對文件進行編輯了,也可以看到了服務(wù)器上的項目文件,其本質(zhì)我認為是在Pycharm端配置了一個SFTP的傳輸工具,可是卻不能運行,原因是沒有配置Python的遠程解釋器。
需要注意的問題
在創(chuàng)建好SFTP配置后,我們想查看服務(wù)器文件的時候會發(fā)現(xiàn)右側(cè)的Remote Host會顯示Nothing to show,這時候不要擔心,如果目錄沒有配置錯誤就相信自己,把項目關(guān)掉然后重新打開,此時再查看服務(wù)器的文件就可以正常顯示了。
配置遠程解釋器
本節(jié)的前提條件是服務(wù)器上有正常的可以運行的Python環(huán)境。
類似于添加Pycharm的解釋器環(huán)境,在Setting中找到Python Interpreter,點擊右上方的小齒輪,選擇Add。
在新彈出來的窗口中選擇SSH Interpreter,因為我們剛才配置SFTP的時候已經(jīng)配置了SSH了,這時候我們就選擇第二個選項Existing server configuration,選擇我們剛才配置的SSH即可。
點擊Next,在這一步我們需要讓Pycharm找到服務(wù)器的Python在哪個地方,并且設(shè)置掃描的文件夾。如果不清楚服務(wù)器的Python安裝在哪個地方,可以使用
which python
命令來查找所使用的Python位置,我這里使用的是Anaconda中的虛擬環(huán)境,記得要查看是否是軟連接,比如說我這個找到的Python就是個軟連接,其真實文件指向的是python3.9
,可以使用
ls -l
命令查看其連接指向
回到剛才的設(shè)置,我們在Interpreter中填入上述的Python路徑,下面那個選項按需勾選(見需注意的問題),其意思是使用Sudo權(quán)限來運行代碼。
接下來我們要設(shè)置本地與遠程同步的項目文件夾,他默認是放在一個/tmp/pycharm_project_283
這種路徑,這個路徑是臨時的,將來很容易出點問題就找不到,這里需要把這個路徑和剛才我們在SFTP配置中Mapping的路徑(也就是映射到的服務(wù)器端的項目文件夾)設(shè)置的一樣。
點擊Finish,完成配置,這時我們的遠程Python解釋器就成功配置好了。
點擊OK,這時我們整個項目就配置上了遠程的Python解釋器,(在這里還有一點需要注意的,見需注意的問題),就可以運行文件了,但是到這里還沒有結(jié)束,幾乎所有的教程到這里都結(jié)束了,說只要運行就可以了,但是實際上當你打開一個服務(wù)器的文件想要運行的時候,你會發(fā)現(xiàn)出現(xiàn)了這樣的錯誤:
[Errno 2] No such file or directory
這時候你會很無奈,為什么按照上面的配置仔細配好了,他卻找不到運行的文件呢?無奈的你去各大網(wǎng)站搜索教程,得到的無非是這幾類答案:
- 路徑不對,所設(shè)置的解釋器的路徑和Mapping的路徑不一致。但是很顯然多次檢查后,這兩個路徑在我們的項目中是一致的。
- 設(shè)置了多個Mapping,導致沖突。在本項目中我們并沒有設(shè)置多個Mapping。
- Upload 的功能配置出現(xiàn)問題,更改Automatic Upload選項為on explicit save,原因是修改后沒有同步而導致的找不到文件。但是設(shè)置之后并沒有作用。
其實真正的原因是:我們搞錯了需求與實現(xiàn),通過這種方法Pycharm只能實現(xiàn)將服務(wù)器上的文件Download下來到本地,在本地進行修改,同時修改會上傳到服務(wù)器上,運行的時候是使用遠程解釋器運行。是不是有點暈了?接下來舉個例子來試試。
使用方法
在服務(wù)器的項目中現(xiàn)在有一個test.py
文件,路徑是/nfs/users/xiaoming/jinrong_project/Finace_Data/test.py
,文件中的內(nèi)容如下圖所示,注意標紅的位置。
此時我們右鍵運行該文件,會報錯
[Errno 2] No such file or directory
這時候我們對在右側(cè)服務(wù)器文件中找到test.py
,把他下載到本地來。
這時候我們會發(fā)現(xiàn)左側(cè)本地項目文件夾下多了一個test.py
,打開這個文件,注意紅圈中的不同。
文件仍然與服務(wù)器上的test.py
內(nèi)容相同,只不過下載到了本地,這時候再用相同的方式運行,會發(fā)現(xiàn)出現(xiàn)結(jié)果了。
這時候如果我們對本地的test.py
更改內(nèi)容,再運行的話,同樣可以出來結(jié)果。我們可以注意下圖中綠圈圈出來的地方,可以看出我們是成功運行了服務(wù)器上的文件,而不是運行的本地的文件(這里我的test.py
在一個新文件夾下,與剛才說的不同,但是不影響)。
這時候我們點開服務(wù)器上的test.py
,發(fā)現(xiàn)內(nèi)容已經(jīng)同步到服務(wù)器上,本地端和服務(wù)端的兩個文件一模一樣。
至此我們完成了整個功能的使用流程,如果將來需要更換遠程的項目或者本地的項目,重新設(shè)置一下Mapping就可以了。
需注意的問題
在添加遠程Python Interpreter的時候,有一個選項來確認是否使用Sudo來運行代碼,很多教程這時會無腦告訴你要把他勾選上,但是不告訴你為什么,所以記得如果你的服務(wù)器不是自己做主的話,一定不要勾選這個,因為你都獲得不到Sudo權(quán)限,更何況Pycharm了,他會報錯Can’t obtain python version,這時候如果你剛才設(shè)置編碼格式為GBK的時候,就會出現(xiàn)一堆報錯亂碼,很不容易找到問題所在。
在成功配置好Python解釋器后,在這個解釋器的Configuration中,我們可以看到其實在添加這個遠程Python解釋器后,他是自動配置了一個SFTP的,下圖中畫紅圈的地方其實有兩個,其中一個是我們剛才配置的Server2
,另一個是這個解釋器自動配置的SFTP(這里我把那個刪除了,使用的是Server2
),其自動配置的SFTP的路徑和Mapping都是默認的,還需要像我們剛才那樣設(shè)置,注意這里不要用錯。
總結(jié)
綜上,其實我們的需求和實際的實現(xiàn)是有所出入的,所以才導致了各種問題的出現(xiàn)。我想要的需求是直接在服務(wù)器上編輯并運行代碼,而不是像現(xiàn)在這樣在本地編輯代碼后上傳到服務(wù)器運行,我們可以清晰的看到Pycharm的思路是這樣的:
- 從服務(wù)器上下載代碼到本地,在本地進行編輯
- 對本地文件點擊運行
- 將修改后的本地文件自動上傳到服務(wù)器上,調(diào)用遠程Python解釋器來運行服務(wù)器文件
所以我目前并不清楚Pycharm是否可以做到不從服務(wù)器上下載文件,直接打開服務(wù)器的代碼進行編輯運行,為什么要多出來下載這一步呢?或許是為了本地與服務(wù)器項目的同步開發(fā)?印象中VSCode似乎能實現(xiàn)這個功能。
可以看出,Pycharm的Deployment和解釋器其實是兩個分隔的模塊,配置Deployment時并不會配置遠程解釋器,只能做到閱讀和編輯遠程代碼,而配置解釋器的時候會自動生成一個新的SFTP配置,這給第一次配置的人增添了理解難度。所以如果想將流程簡單化的話,可以先不設(shè)置SFTP配置,直接添加遠程Python解釋器,然后使用它自動做好的SFTP配置,對其設(shè)置Root Path和Mapping。
最后還有一個問題,為什么同樣是在服務(wù)器運行代碼,直接點開服務(wù)器的代碼運行就會找不到文件,而本地代碼上傳到服務(wù)器后就能找到文件呢?
我的猜想是這樣:雖然同樣是在服務(wù)器運行代碼,但是為了簡化我們自己的操作,Pycharm把尋找本地文件→上傳至服務(wù)器→運行服務(wù)器代碼這三步全部合成在運行這一步上,這就導致我們?nèi)绻苯舆\行服務(wù)器代碼,因為這個代碼是服務(wù)器上的,所以Pycharm在本地找不到這個文件,就會報錯,后面的步驟自然也執(zhí)行不了了。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python+selenium爬取微博熱搜存入Mysql的實現(xiàn)方法
這篇文章主要介紹了python+selenium爬取微博熱搜存入Mysql的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01如何使用python讀取Excel指定范圍并轉(zhuǎn)為數(shù)組
python處理數(shù)據(jù)文件的途徑有很多種,下面這篇文章主要給大家介紹了關(guān)于如何使用python讀取Excel指定范圍并轉(zhuǎn)為數(shù)組的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11Keras SGD 隨機梯度下降優(yōu)化器參數(shù)設(shè)置方式
這篇文章主要介紹了Keras SGD 隨機梯度下降優(yōu)化器參數(shù)設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python環(huán)境搭建以及Python與PyCharm安裝詳細圖文教程
PyCharm是一種PythonIDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,這篇文章主要給大家介紹了關(guān)于Python環(huán)境搭建以及Python與PyCharm安裝的詳細圖文教程,需要的朋友可以參考下2024-03-03