VS Code 遠程連接服務器:Anaconda 環境與 Python/Jupyter 運行全指南。研0大模型學習(第六、第七天)

VS Code 遠程連接服務器:Anaconda 環境與 Python/Jupyter 運行全指南

在使用 VS Code 通過 SSH 遠程連接到服務器進行開發時,尤其是在進行深度學習等需要特定環境的工作時,正確配置和使用 Anaconda 環境以及理解不同的代碼運行方式非常關鍵。本文將梳理在 VS Code 遠程連接環境下,如何管理 Anaconda 環境并運行 Python 代碼(包括 .py 文件和 .ipynb 文件)。

我的環境 setup

  • 本地: Visual Studio Code
  • 遠程服務器: 通過 VS Code Remote-SSH 連接
  • 服務器軟件: 安裝了 Anaconda
  • Anaconda 環境: 創建了名為 pytorch_env 的虛擬環境,用于深度學習。
  • VS Code 插件:遠程服務器上安裝了 VS Code 的 Python 插件和 Jupyter 相關插件。

Anaconda 環境與 Jupyter

遠程服務器上安裝 Anaconda 后,默認的 base 環境通常會直接包含 Jupyter Notebook 和 JupyterLab。但是,我們自己創建的虛擬環境(例如 pytorch_env)默認是“干凈”的,不包含 Jupyter 相關組件。

為了在特定的虛擬環境(如 pytorch_env)中使用 Jupyter 的功能(包括在 VS Code 中運行 .ipynb 文件或使用交互式窗口),我們需要在這個環境中安裝必要的庫。

核心需求:在 pytorch_env 環境下使用 Jupyter 內核

步驟如下:

  1. 激活 pytorch_env 環境:
    打開 VS Code 的集成終端(確保它連接的是你的遠程服務器),然后執行:

    conda activate pytorch_env
    
  2. 在該環境下安裝 ipykernel
    ipykernel 是連接 Jupyter 和 Python 環境的關鍵庫。在已經激活 pytorch_env 的終端中執行:

    pip install ipykernel
    
  3. 設置該環境為 Jupyter 內核(可選但推薦):
    安裝 ipykernel 通常會自動注冊內核,但手動執行可以確保 VS Code 和 Jupyter 能夠識別這個環境。在激活 pytorch_env 的終端中執行:

    python -m ipykernel install --user --name=pytorch_env --display-name="PyTorch Env (pytorch_env)"
    

    這里的 --display-name 是你在 VS Code 的內核列表中看到的環境名稱,可以根據喜好設置。

完成以上步驟后,你的 pytorch_env 環境就已經具備了作為 Jupyter 內核的能力。

在 VS Code 中選擇 Jupyter 內核

現在,當你新建或打開一個 .ipynb 文件時,VS Code 會提示你選擇一個內核。

選擇內核時,你會看到類似這樣的選項:

正確的選擇是點擊 “Python 環境…”

點擊后,VS Code 會列出它在遠程服務器上檢測到的所有 Python 環境(包括 base 和你創建的 pytorch_env)。你應該在列表中找到并選擇你的 pytorch_env

這樣做的好處是,你不需要手動在服務器上運行 jupyter notebookjupyter lab 命令來啟動一個完整的 Jupyter Server。VS Code 會利用你選擇的具備 ipykernel 的 Python 環境,在后臺為你處理啟動和管理 Jupyter 內核的底層細節。

不要選擇“現有 Jupyter 服務器…”,那個選項用于連接一個已經在服務器上獨立運行起來的 Jupyter Server 實例,通常需要你手動啟動該服務器并提供 URL 和 Token。

選擇好 pytorch_env 內核后,你就可以在 .ipynb 文件中編寫和運行代碼了。

理解不同的 Python 代碼運行方式

除了在 .ipynb 文件中運行,VS Code 還提供了其他運行 Python 代碼的方式。理解它們的區別,特別是它們與 Jupyter 的關系,有助于選擇最適合當前任務的方式。

首先明確一點:無論采用哪種方式,你的代碼最終都是由服務器上的 Python 解釋器(特別是來自你指定的 Conda 環境,如 pytorch_env)來執行的。區別在于運行時的界面執行模式工作目錄

1. 在終端上運行 Python 文件(.py
  • 模式: 這是最傳統、標準的 Python 腳本執行模式。
  • 過程:
    1. 你打開一個終端(可以是 VS Code 的集成終端,也可以是直接通過 SSH 連接的終端)。
    2. 激活你的目標環境(例如:conda activate pytorch_env)。
    3. 輸入命令 python your_script_name.py 來運行整個 .py 文件。
  • 執行: 代碼會從 .py 文件的第一行開始,一直執行到最后,是一次性的、線性的過程。
  • 輸出: 所有通過 print() 打印的內容會顯示在終端窗口中。
  • 交互性: 非常低。代碼執行過程中你通常無法方便地暫停、查看中間變量的值或分步執行。
  • 工作目錄: 通常是你執行 python 命令時,終端所在的那個目錄。這是導致相對文件路徑問題的一個常見原因。
  • 與 Jupyter 的關系: 這不是在 Jupyter 上運行。 這僅僅是使用指定的 Python 解釋器來執行一個普通的 Python 腳本。
2. 在交互式窗口中運行(配合 .py 文件使用)
  • 模式: 這是 VS Code 提供的一種類似 Jupyter Notebook 的交互式代碼執行模式,但你的代碼仍然保存在標準的 .py 文件中。
  • 過程:
    1. 你打開一個 .py 文件。
    2. 可以在文件中使用 # %% 等標記將代碼劃分為不同的塊(被稱為“代碼 cell”)。
    3. 點擊代碼塊旁邊的“運行 cell”按鈕。
    4. VS Code 會自動啟動或連接到一個獨立的“Python 交互式”窗口。
  • 執行: 你可以靈活地選擇文件中的某一個或某幾個代碼塊進行執行。代碼的執行狀態(如定義的變量、函數定義等)會在整個交互式窗口的會話期間保持。
  • 輸出: print 的內容、代碼的返回值、甚至 Matplotlib 繪制的圖表會直接顯示在交互式窗口中,通常是代碼塊的下方,而不是在終端。
  • 交互性: 很高。非常適合在開發過程中進行探索、測試、調試和查看中間結果。
  • 工作目錄: 通常默認為 .py 文件所在的目錄(但這有時可以在 VS Code 設置中進行配置)。這是導致相對路徑問題在終端和交互式窗口表現不同的原因之一。
  • 與 Jupyter 的關系: 底層使用了 Jupyter 的技術,特別是 Jupyter 內核。 VS Code 在后臺啟動一個 Jupyter 內核(基于你選擇的 Python 環境)來管理和執行交互式窗口中的代碼。你可以認為它是在 VS Code 這個界面下,由 .py 文件內容驅動的一種“Jupyter 體驗”。
3. 在 Jupyter Notebook(.ipynb)中運行
  • 模式: 這是 Jupyter 平臺最經典的原生交互式文檔模式。文件本身(.ipynb)就包含了代碼、代碼輸出、以及使用 Markdown 編寫的文本和說明。
  • 過程:
    1. 你打開一個 .ipynb 文件。
    2. VS Code 會以 Notebook 界面打開它。
    3. 你需要選擇一個 Jupyter 內核(也就是一個安裝了 ipykernel 的 Python 環境)來運行這個 Notebook。
  • 執行: 代碼被組織在不同的 cell 中,你可以逐個運行 cell。代碼的執行狀態在整個 Notebook 會話期間保持。
  • 輸出: 代碼輸出、圖表、甚至 HTML 等富文本內容會直接顯示在對應的代碼 cell 下方,并會與 Notebook 文件內容一起保存。
  • 交互性: 非常高。是專為交互式探索、數據分析和結合代碼與文檔進行演示而設計的。
  • 工作目錄: 通常是 .ipynb 文件所在的目錄。
  • 與 Jupyter 的關系: 這就是在 Jupyter 上運行。 VS Code 在這里充當了 Jupyter 的一個功能強大的客戶端界面。

因此在終端上運行Python文件和在交互式窗口運行Python文件時他們的工作目錄不同,因此使用相對路徑無法同時在這兩個模式下運行。要運行的話得改成絕對路徑

解決終端環境顯示異常 (pytorch_env) (base)

你提到在終端中看到了類似 (pytorch_env) (base) 這樣的提示,這表明可能出現了環境嵌套或環境變量混淆的情況。這不是正常現象,通常終端提示符應該只顯示一個當前激活的環境名稱(例如 (pytorch_env)(base))。

讓我們來修復這個問題:

  1. 退出所有 Conda 環境:
    連續執行 conda deactivate 命令,直到終端提示符不再顯示任何環境名稱為止。通常執行兩次 conda deactivate 就夠了,因為 conda deactivate 只退出最內層的環境。

    conda deactivate
    conda deactivate
    

    (根據實際情況可能需要執行更多次)

  2. 重新激活你想要使用的環境:
    例如,重新激活 pytorch_env

    conda activate pytorch_env
    

    此時,終端提示符應該只顯示 (pytorch_env)

如果這個問題經常發生,可能是你的 shell 配置文件(如 ~/.bashrc, ~/.zshrc 等)中有重復的環境激活或 Conda 初始化設置。可以檢查這些文件,確保 conda init 只被執行一次,并且沒有其他代碼會導致環境意外激活。

知識點總結

  • 遠程服務器中安裝 Anaconda 后,默認的 base 環境通常會直接包含了 jupyter notebookjupyter labipykernel 等庫。
  • 你自己使用 conda create 創建的新環境默認是最小化的,不自動包含 Jupyter 相關庫(特別是 ipykernel)。
  • 要在自定義環境中利用 Jupyter 功能(Notebook 或交互式窗口),核心是確保該環境中安裝了 ipykernel
  • VS Code 遠程連接時,通過選擇正確的 Python 環境(安裝了 ipykernel 的環境),可以直接利用該環境作為 Jupyter 內核,無需手動啟動完整的 Jupyter Server。

總結與選擇

  • 在終端運行 .py 標準 Python 腳本執行 (不是 Jupyter)。適用于最終運行、自動化。
  • 在交互式窗口運行 .py 利用了 Jupyter 內核的能力,在 VS Code 中提供類似 Notebook 的交互體驗,代碼仍在 .py 文件中。適用于開發、調試。
  • 在 VS Code 中運行 .ipynb VS Code 提供了原生的 Jupyter Notebook 功能和界面,這就是在 Jupyter 上進行操作。適用于探索、文檔、結合代碼與輸出。

你可以根據當前所處的開發階段和需求,選擇最適合的運行方式。在 VS Code 中進行深度學習開發,通常建議優先使用 .ipynb 文件或 .py 文件配合交互式窗口,以利用其強大的交互和可視化能力。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79740.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79740.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79740.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

字節頭條golang二面

docker和云服務的區別 首先明確Docker的核心功能是容器化,它通過容器技術將應用程序及其依賴項打包在一起,確保應用在不同環境中能夠一致地運行。而云服務則是由第三方提供商通過互聯網提供的計算資源,例如計算能力、存儲、數據庫等。云服務…

數據結構和算法(七)--樹

一、樹 樹是我們計算機中非常重要的一種數據結構,同時使用樹這種數據結構,可以描述現實生活中的很多事物,例如家譜、單位的組織架構、等等。 樹是由n(n>1)個有限結點組成一個具有層次關系的集合。把它叫做"樹"是因為它看起來像一…

狀態管理最佳實踐:Provider使用技巧與源碼分析

狀態管理最佳實踐:Provider使用技巧與源碼分析 前言 Provider是Flutter官方推薦的狀態管理解決方案,它簡單易用且功能強大。本文將從實戰角度深入講解Provider的使用技巧和源碼實現原理,幫助你更好地在項目中應用Provider進行狀態管理。 基…

使用 NEAT 進化智能體解決 Gymnasium 強化學習環境

使用 NEAT 進化智能體解決 Gymnasium 強化學習環境 0. 前言1. 環境定義2. 配置 NEAT3. 解決強化學習問題小結系列鏈接0. 前言 在本節中,我們使用 NEAT 解決經典強化學習 (reinforcement learning, RL) Gym 問題。但需要注意的是,我們用于推導網絡和解決方程的方法不是 RL,而…

Pandas高級功能

在數據科學與機器學習的廣闊天地中,Pandas宛如一把瑞士軍刀,以其強大的數據處理和分析能力,成為眾多數據從業者的得力助手。從基礎的數據讀寫、清洗到復雜的數據聚合、轉換,Pandas的功能豐富多樣。本文將深入探索Pandas的一些高級…

英語學習4.15

amateur amateur 🔤 讀音:/?m?t?r/ 或 /?m?t??r/ ? 詞性:名詞 / 形容詞 ? 中文釋義: (名詞)業余愛好者 ??👉 指不是以此為職業的人,通常出于興趣而從事某項活動。 ??…

Java開發軟件

Main.java // 主類,用于測試學生管理系統 public class Main { public static void main(String[] args) { StudentManagementSystem sms new StudentManagementSystem(); // 添加學生 sms.addStudent(new Student(1, "Alice", 20)…

多Agent框架及協作機制詳解

文章目錄 一、多智能體系統介紹1.1 多智能體系統定義1.2 多智能體協作1.3 協作類型1.4 協作策略1.5 通信結構1.6 協調與編排 1.3 多智能體與單智能體對比1.4 應用場景 二、多Agent開發框架AutoGenMetaGPTLangGraphSwarmCrewAI 三、多智能體協作方式3.1 MetaGPT:SOP驅…

AI Agent破局:智能化與生態系統標準化的顛覆性融合!

Hi!好久不見 云邊有個稻草人-個人主頁 熱門文章_云邊有個稻草人的博客-本篇文章所屬專欄~ 目錄 一、引言 二、AI Agent的基本概念 2.1 定義與分類 2.2 AI Agent的工作原理 2.3 示例代碼:AI Agent的基本實現 三、AI Agent在企業數字化轉型中的應用 …

在阿里云和樹莓派上編寫一個守護進程程序

目錄 一、阿里云郵件守護進程 1. 安裝必要庫 2. 創建郵件發送腳本 mail_daemon.py 3. 設置后臺運行 二、樹莓派串口守護進程 1. 啟用樹莓派串口 2. 安裝依賴庫 3. 創建串口輸出腳本 serial_daemon.py 4. 設置開機自啟 5. 使用串口助手接收 一、阿里云郵件守護進程 1.…

Python----深度學習(全連接與鏈式求導法則)

一、機器學習和深度學習的區別 機器學習:利用計算機、概率論、統計學等知識,輸入數據,讓計算機學會新知 識。機器學習的過程,就是訓練數據去優化目標函數。 深度學習:是一種特殊的機器學習,具有強大的能力和…

Python爬蟲實戰:獲取網易新聞數據

一、引言 隨著互聯網的飛速發展,網絡上蘊含著海量的信息資源。新聞數據作為其中的重要組成部分,對于輿情分析、市場研究、信息傳播等多個領域具有重要價值。網易新聞作為國內知名的新聞平臺,擁有豐富多樣的新聞內容。使用 Python 的 Scrapy 框架進行網易新聞數據的爬取,可…

matlab論文圖一的地形區域圖的球形展示Version_1

matlab論文圖一的地形區域圖的球形展示Version_1 圖片 此圖來源于: ![Jieqiong Zhou, Ziyin Wu, Dineng Zhao, Weibing Guan, Chao Zhu, Burg Flemming, Giant sand waves on the Taiwan Banks, southern Taiwan Strait: Distribution, morphometric relationship…

藍橋杯:連連看

本題大意要我們在一個給定的nxm的矩形數組中找出符合條件的格子 條件如下: 1.數值相同 2.兩個橫坐標和縱坐標的差值相等(由此可得是一個對角線上的格子) 那么根據以上條件我們可以用HashMap來解決這個問題,統計對角線上數值相同…

PHP中的ReflectionClass講解【詳細版】

快餐: ReflectionClass精簡版 在PHP中,ReflectionClass是一個功能強大的反射類,它就像是一個類的“X光透視鏡”,能讓我們在程序運行時深入了解類的內部結構和各種細節。 一、反射類的基本概念和重要性 反射是指在程序運行期間獲…

微信小程序中,將搜索組件獲取的值傳遞給父頁面(如 index 頁面)可以通過 自定義事件 或 頁面引用 實現

將搜索組件獲取的值傳遞給父頁面(如 index 頁面)可以通過 自定義事件 或 頁面引用 實現 方法 1:自定義事件(推薦) 步驟 1:搜索組件內觸發事件 在搜索組件的 JS 中,當獲取到搜索值時&#xff0c…

Django 實現服務器主動給客戶端發送消息的幾種常見方式及其區別

Django Channels 原理 :Django Channels 是 Django 的一個擴展,它通過使用 WebSockets 等協議來處理長連接,使服務器能夠與客戶端建立持久連接,從而實現雙向通信。一旦連接建立,服務器可以隨時主動向客戶端發送消息。…

PHP最新好看UI個人引導頁網頁源碼

PHP最新好看UI個人引導頁網頁源碼 采用PHP、HTML、CSS及JavaScript等前端技術,構建了一個既美觀又實用的個人主頁解決方案。 源碼設計初衷在于提供一個高度可定制、跨平臺兼容的模板,讓用戶無需深厚的編程基礎,即可快速搭建出專業且富有創意的…

HarmonyOS學習 實驗九:@State和@Prop裝飾器的使用方法

HarmonyOS應用開發:父子組件狀態管理實驗報告 引言 在HarmonyOS應用開發領域,組件之間的狀態管理是一個至關重要的概念。通過有效的狀態管理,我們可以確保應用的數據流動清晰、可預測,從而提升應用的穩定性和可維護性。本次實驗…

12.第二階段x64游戲實戰-遠程調試

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 本次游戲沒法給 內容參考于:微塵網絡安全 上一個內容:11.第二階段x64游戲實戰-框架代碼細節優化 本次寫的內容是關于調試、排錯相關的…