Pycharm中SSH、SFTP連接遠程服務器編輯調(diào)試實例
需求分析
我目前的需求是將代碼部署在服務器上,使用Pycharm的SSH連接Linux服務器,用Pycharm的友好界面遠程運行服務器上的Python項目,并且可以對其進行修改。
本篇文章查閱了大量的資料,并希望把整個的流程以及錯誤處理描述的比較全面。
注意:本文章適用于Pycharm的專業(yè)版,免費的社區(qū)版本沒有遠程連接的功能。
SFTP配置
首先第一步來配置SFTP,很多教程在這一步先來設置SSH,SSH設置比較簡單,但是Pycharm在設置完SSH后只能擔當XShell等軟件的角色,并不能滿足我們剛才提出的需求(比如說要查看整個項目文件列表并把Python文件展示在Pycharm中),所以第一步我們先來設置SFTP。
創(chuàng)建一個新的Pycharm項目
在最開始做這件事的時候我并不知道本地項目和遠程項目的關系,為了事實上Pycharm在這里把本地的項目和遠程的項目做了一個映射的關系,通過這些配置,我們既可以把服務器項目的文件拉取到本地項目中,也可以把本地項目的文件上傳到服務器項目中,所以為了方便演示,我們創(chuàng)建一個新的項目,這個項目我把他叫做Pycharm_Remote。

如圖所示,我們在本地創(chuàng)建一個最基本的純Python項目,如果您不清楚具體的過程,可以在搜索引擎中搜索Pycharm 創(chuàng)建項目關鍵字來查找教程。
創(chuàng)建項目中使用的Python環(huán)境可以先設置為我們本地的Python環(huán)境。
創(chuàng)建SFTP相關配置
在導航欄部分找到Tools→Deployment→Configuration

在彈出的窗口中點擊左上角加號,選擇SFTP

輸入你想給這個鏈接起的名字

點擊OK,在新出來的頁面中創(chuàng)建一個新的SSH連接,點擊三個點,然后點擊加號,輸入一個新的SSH連接。

其中Visible only for this project指的是是否在不同項目中共享這個SFTP配置,可以按需開啟,在SSH設置中輸入服務器的IP地址,以及相應的用戶名,就如同在XShell中連接服務器那樣。

我們可以測試連接,測試成功后點擊OK后回到配置SFTP的界面。

如果是使用Windows連接Linux的話,最好可以把Advanced中的編碼從GBK改成UTF-8,這樣在報錯的時候如果服務器那邊返回的是中文的錯誤,Windows這邊就不會顯示亂碼而找不到原因所在(血淚教訓),而且如果遇到中文數(shù)據(jù)文件什么的與服務器也好溝通。

接下來我們配置比較關鍵的一個環(huán)節(jié),需要配置Root Path,這個字段的意思是遠程服務器的根路徑,比如說我把他設置為/home/a/,那就意味著我們把a這個文件夾當做了Pycharm所檢測的根路徑,將來的項目必須在a這個文件夾下面Pycharm才能檢測得到。
這里還有一個Autodetect的選項,他會自動選擇主目錄下的用戶文件夾作為Root Path,如/home/xiaoming/,大家按需所取即可。

如上圖所示,我們配置了SFTP的所有Connection部分,接下來來到Mapping部分,這部分的用處是將我們本地的文件夾和服務器上的項目文件夾聯(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配置就結束了,這時我們可以看項目的右下角展現(xiàn)了我們剛才的配置名稱server2。

這時我們可以在導航欄找到Tools→Deployment→Browse Remote Host,在右邊就會出現(xiàn)剛才設置的Root Path下的所有文件。(如沒有出現(xiàn),見需要注意的問題)


我們選擇相應的文件,雙擊就可以展現(xiàn)出來了

這個時候我們可以對其進行編輯,在導航欄找到Tools→Deployment→Automatic Upload,打開,這時候我們對文件的更改就會自動上傳到服務器上

這時我們已經(jīng)可以對文件進行編輯了,也可以看到了服務器上的項目文件,其本質(zhì)我認為是在Pycharm端配置了一個SFTP的傳輸工具,可是卻不能運行,原因是沒有配置Python的遠程解釋器。
需要注意的問題
在創(chuàng)建好SFTP配置后,我們想查看服務器文件的時候會發(fā)現(xiàn)右側的Remote Host會顯示Nothing to show,這時候不要擔心,如果目錄沒有配置錯誤就相信自己,把項目關掉然后重新打開,此時再查看服務器的文件就可以正常顯示了。

配置遠程解釋器
本節(jié)的前提條件是服務器上有正常的可以運行的Python環(huán)境。
類似于添加Pycharm的解釋器環(huán)境,在Setting中找到Python Interpreter,點擊右上方的小齒輪,選擇Add。

在新彈出來的窗口中選擇SSH Interpreter,因為我們剛才配置SFTP的時候已經(jīng)配置了SSH了,這時候我們就選擇第二個選項Existing server configuration,選擇我們剛才配置的SSH即可。

點擊Next,在這一步我們需要讓Pycharm找到服務器的Python在哪個地方,并且設置掃描的文件夾。如果不清楚服務器的Python安裝在哪個地方,可以使用
which python
命令來查找所使用的Python位置,我這里使用的是Anaconda中的虛擬環(huán)境,記得要查看是否是軟連接,比如說我這個找到的Python就是個軟連接,其真實文件指向的是python3.9,可以使用
ls -l
命令查看其連接指向


回到剛才的設置,我們在Interpreter中填入上述的Python路徑,下面那個選項按需勾選(見需注意的問題),其意思是使用Sudo權限來運行代碼。

接下來我們要設置本地與遠程同步的項目文件夾,他默認是放在一個/tmp/pycharm_project_283這種路徑,這個路徑是臨時的,將來很容易出點問題就找不到,這里需要把這個路徑和剛才我們在SFTP配置中Mapping的路徑(也就是映射到的服務器端的項目文件夾)設置的一樣。

點擊Finish,完成配置,這時我們的遠程Python解釋器就成功配置好了。

點擊OK,這時我們整個項目就配置上了遠程的Python解釋器,(在這里還有一點需要注意的,見需注意的問題),就可以運行文件了,但是到這里還沒有結束,幾乎所有的教程到這里都結束了,說只要運行就可以了,但是實際上當你打開一個服務器的文件想要運行的時候,你會發(fā)現(xiàn)出現(xiàn)了這樣的錯誤:


[Errno 2] No such file or directory
這時候你會很無奈,為什么按照上面的配置仔細配好了,他卻找不到運行的文件呢?無奈的你去各大網(wǎng)站搜索教程,得到的無非是這幾類答案:
- 路徑不對,所設置的解釋器的路徑和Mapping的路徑不一致。但是很顯然多次檢查后,這兩個路徑在我們的項目中是一致的。
- 設置了多個Mapping,導致沖突。在本項目中我們并沒有設置多個Mapping。
- Upload 的功能配置出現(xiàn)問題,更改Automatic Upload選項為on explicit save,原因是修改后沒有同步而導致的找不到文件。但是設置之后并沒有作用。
其實真正的原因是:我們搞錯了需求與實現(xiàn),通過這種方法Pycharm只能實現(xiàn)將服務器上的文件Download下來到本地,在本地進行修改,同時修改會上傳到服務器上,運行的時候是使用遠程解釋器運行。是不是有點暈了?接下來舉個例子來試試。
使用方法
在服務器的項目中現(xiàn)在有一個test.py文件,路徑是/nfs/users/xiaoming/jinrong_project/Finace_Data/test.py,文件中的內(nèi)容如下圖所示,注意標紅的位置。

此時我們右鍵運行該文件,會報錯
[Errno 2] No such file or directory


這時候我們對在右側服務器文件中找到test.py,把他下載到本地來。

這時候我們會發(fā)現(xiàn)左側本地項目文件夾下多了一個test.py,打開這個文件,注意紅圈中的不同。

文件仍然與服務器上的test.py內(nèi)容相同,只不過下載到了本地,這時候再用相同的方式運行,會發(fā)現(xiàn)出現(xiàn)結果了。

這時候如果我們對本地的test.py更改內(nèi)容,再運行的話,同樣可以出來結果。我們可以注意下圖中綠圈圈出來的地方,可以看出我們是成功運行了服務器上的文件,而不是運行的本地的文件(這里我的test.py在一個新文件夾下,與剛才說的不同,但是不影響)。


這時候我們點開服務器上的test.py,發(fā)現(xiàn)內(nèi)容已經(jīng)同步到服務器上,本地端和服務端的兩個文件一模一樣。

至此我們完成了整個功能的使用流程,如果將來需要更換遠程的項目或者本地的項目,重新設置一下Mapping就可以了。
需注意的問題
在添加遠程Python Interpreter的時候,有一個選項來確認是否使用Sudo來運行代碼,很多教程這時會無腦告訴你要把他勾選上,但是不告訴你為什么,所以記得如果你的服務器不是自己做主的話,一定不要勾選這個,因為你都獲得不到Sudo權限,更何況Pycharm了,他會報錯Can’t obtain python version,這時候如果你剛才設置編碼格式為GBK的時候,就會出現(xiàn)一堆報錯亂碼,很不容易找到問題所在。

在成功配置好Python解釋器后,在這個解釋器的Configuration中,我們可以看到其實在添加這個遠程Python解釋器后,他是自動配置了一個SFTP的,下圖中畫紅圈的地方其實有兩個,其中一個是我們剛才配置的Server2,另一個是這個解釋器自動配置的SFTP(這里我把那個刪除了,使用的是Server2),其自動配置的SFTP的路徑和Mapping都是默認的,還需要像我們剛才那樣設置,注意這里不要用錯。

總結
綜上,其實我們的需求和實際的實現(xiàn)是有所出入的,所以才導致了各種問題的出現(xiàn)。我想要的需求是直接在服務器上編輯并運行代碼,而不是像現(xiàn)在這樣在本地編輯代碼后上傳到服務器運行,我們可以清晰的看到Pycharm的思路是這樣的:
- 從服務器上下載代碼到本地,在本地進行編輯
- 對本地文件點擊運行
- 將修改后的本地文件自動上傳到服務器上,調(diào)用遠程Python解釋器來運行服務器文件
所以我目前并不清楚Pycharm是否可以做到不從服務器上下載文件,直接打開服務器的代碼進行編輯運行,為什么要多出來下載這一步呢?或許是為了本地與服務器項目的同步開發(fā)?印象中VSCode似乎能實現(xiàn)這個功能。
可以看出,Pycharm的Deployment和解釋器其實是兩個分隔的模塊,配置Deployment時并不會配置遠程解釋器,只能做到閱讀和編輯遠程代碼,而配置解釋器的時候會自動生成一個新的SFTP配置,這給第一次配置的人增添了理解難度。所以如果想將流程簡單化的話,可以先不設置SFTP配置,直接添加遠程Python解釋器,然后使用它自動做好的SFTP配置,對其設置Root Path和Mapping。
最后還有一個問題,為什么同樣是在服務器運行代碼,直接點開服務器的代碼運行就會找不到文件,而本地代碼上傳到服務器后就能找到文件呢?
我的猜想是這樣:雖然同樣是在服務器運行代碼,但是為了簡化我們自己的操作,Pycharm把尋找本地文件→上傳至服務器→運行服務器代碼這三步全部合成在運行這一步上,這就導致我們?nèi)绻苯舆\行服務器代碼,因為這個代碼是服務器上的,所以Pycharm在本地找不到這個文件,就會報錯,后面的步驟自然也執(zhí)行不了了。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python+selenium爬取微博熱搜存入Mysql的實現(xiàn)方法
這篇文章主要介紹了python+selenium爬取微博熱搜存入Mysql的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
如何使用python讀取Excel指定范圍并轉(zhuǎn)為數(shù)組
python處理數(shù)據(jù)文件的途徑有很多種,下面這篇文章主要給大家介紹了關于如何使用python讀取Excel指定范圍并轉(zhuǎn)為數(shù)組的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11
Keras SGD 隨機梯度下降優(yōu)化器參數(shù)設置方式
這篇文章主要介紹了Keras SGD 隨機梯度下降優(yōu)化器參數(shù)設置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python環(huán)境搭建以及Python與PyCharm安裝詳細圖文教程
PyCharm是一種PythonIDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,這篇文章主要給大家介紹了關于Python環(huán)境搭建以及Python與PyCharm安裝的詳細圖文教程,需要的朋友可以參考下2024-03-03

