VS Code(Visual Studio Code)本地(local)和远程(ssh)Docker Container 下的 Python 开发和调试

news2024/11/18 5:48:59

VS Code(Visual Studio Code)本地(local)和远程(ssh)Docker Container 下的 Python 开发和调试

  • 1. 目的需求
  • 2. VS Code 简介
  • 3. 使用实践:一个简单的实例
    • 3.1 准备工作
      • 3.1.1 远程服务器
      • 3.1.2 本地计算机
    • 3.2 简单实例
      • 3.2.1 本地(local)- 远程服务器
      • 3.2.2 远程(ssh)- 本地计算机
      • 3.2.3 总结

1. 目的需求

我们通常在 Python 上进行 人工智能算法 开发,但是这通常需要专用的运行环境、依赖库和配置文件。为了 人工智能算法 开发的便利,通常会使用 Docker,因为 Docker 可以将我们的人工智能算法工程打包封装到一个 Container (容器)中,该 Container (容器)包含了 人工智能算法工程 的代码、运行环境、依赖库、配置文件等必需的资源,通过 Container (容器)就可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,Container (容器)中的 人工智能算法工程 都会运行在同一种环境下。

然而 Docker Container 下通常是命令行交互,为了使 对应 Python 的开发和调试 更加便捷,我们使用 VS Code(Visual Studio Code)+ Remote Development 插件 来进行本地(local)和远程(ssh)Docker Container 下的 Python 开发和调试。

说明:PyCharm 付费的专业版有类似功能,但免费的社区版没有类似功能,所以这里使用 免费的解决方案(VS Code + Remote Development 插件)

2. VS Code 简介

VS Code,全称Visual Studio Code,是一款由微软开发的跨平台免费源代码编辑器。它可以在Windows、macOS和Linux等多个操作系统上运行,并且提供了丰富的功能和扩展支持。

VS Code支持语法高亮、代码自动补全(又称IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。用户可以通过更改主题和键盘快捷方式实现个性化设置,也可以通过内置的扩展程序商店安装扩展以拓展软件功能。VS Code使用Monaco Editor作为其底层的代码编辑器。

在开发者社区中,VS Code因其轻量级、多平台支持和丰富的插件生态系统而备受青睐。根据Stack Overflow组织的开发者调查,Visual Studio Code被认为是最受开发者欢迎的开发环境之一。

3. 使用实践:一个简单的实例

3.1 准备工作

3.1.1 远程服务器

3.1.1.1 ubuntu 20.04 系统

说明:此处以 ubuntu 20.04 为介绍,其他系统可以举一反三

3.1.1.2 部署 docker 服务

(1) 安装 docker

  安装 docker

(2)编写 Dockerfile 文件

FROM ubuntu:20.04
MAINTAINER hjw
RUN apt-get update && \
    apt-get install -y python3 && \
    apt-get install -y vim

CMD ["/bin/bash"]

说明:此处在文件夹 docker_test 下新建 Dockerfile,并编辑内容如上所示

在这里插入图片描述

(3)通过 Dockerfile 构建 docker

docker build -t docker_test:1.0 .

说明:使用当前目录的 Dockerfile 创建镜像,标签为 docker_test:1.0

在这里插入图片描述

(4)运行构建好的 docker container

docker run -it --name test -p 8022:22 --rm docker_test:"1.0"

说明:使用镜像 docker_test:1.0 启动一个容器,并将容器命名为 test,并将容器的 22 端口映射到主机的 8022 端口,-it 确保 docker 后台交互运行

在这里插入图片描述

(5)进入 container 配置 root 密码

passwd

在这里插入图片描述

(6)进入 container 安装配置软件

apt-get update
apt-get install -y vim

3.1.1.3 Docker Container 的 SSH 服务配置

(1)安装 ssh

apt-get install -y openssh-server

(2)修改 ssh 配置

vi /etc/ssh/sshd_config

添加如下配置:

PubkeyAuthentication yes

PermitRootLogin yes

在这里插入图片描述

(3)重启 ssh 服务

service ssh restart

在这里插入图片描述

3.1.2 本地计算机

3.1.2.1 windows 10 系统

说明:此处以 windows 10 为介绍,其他系统可以举一反三

3.1.1.2 配置 VS Code 服务

(1)安装 VS Code

  VS Code 官方下载链接

(2)Extensions 添加 Remote Development

说明:参考下图,添加并安装完成 Remote Development,进行 reload 或者 重启 VS Code

在这里插入图片描述

(3)配置 ssh

“Ctrl + Shift + P” ,输入“Remote-SSH”,选择“Open SSH Configuration File”,打开“****.ssh\config”,编辑如下

Host alias
    HostName 10.78.3.124
    Port 8022
    User root

说明:参考下面3幅图,其中 Host 随便选名字,HostName 是远程服务器的 IP 地址,Port 是 远程服务器的 docker 映射到服务器上的端口号(此处需要与 3.1.1.2 (4) 中 docker_test:1.0 的端口号对应,即8022),User 是登陆账户

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(4)连接 SSH 主机

“Ctrl + Shift + P” ,输入“Remote-SSH”,选择“Connect to Host…”,然后点击“alias”,接着选“Linux”,“Continue”,最后按提示输入 3.1.1.2 中 (5)所配置的 root 密码,在左下角显示“SSH: alias”,说明已经成功连接 docker。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

说明:输入 root 密码,密码与 3.1.1.2(5) 中设置保持一致

在这里插入图片描述

说明:连接的过程中,需要下载资源并进行配置,需要耗费一定的时间

在这里插入图片描述

说明:在左下角显示“SSH: alias”,说明已经成功连接 docker,并且 TERMINAL 显示 docker 命令行,此过程中会需要再次输入 root 密码,密码与 3.1.1.2(5) 中设置保持一致

连接异常处理

出现如下连接异常,主要是 key 验证失败,只需要清除原先的 key 即可。

在这里插入图片描述

解决方法是,找到对应 known_hosts 文件,并删除其中原来的 host key 条目(与前文对应,其中 [10.78.3.124]:8022 是 远程服务器的 IP 和 Port),这里对应的是 [10.78.3.124]:8022 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIRamKyTqfJ/t9vkADiZ4DUK9c6HnwZlPydU5zBAf2WU4MQq3KC1ceOEKqKDqR09wAJHXWBTWkQ/mSKNTBzQ7fE=,将此条目删除后,重启 VS Code,重复 (4)连接 SSH 主机 操作即可
在这里插入图片描述

连接异常处理,说明:在 ubuntu 系统中,使用命令 ssh-keygen -f “/home/hjw/.ssh/known_hosts” -R “[10.78.3.124]:8022” 删除其中原来的 host key 条目(与前文对应,其中 [10.78.3.124]:8022 是 远程服务器的 IP 和 Port),将此条目删除后,重启 VS Code,重复 连接 SSH 主机 操作即可

(5)Extensions 添加 Python 插件

说明:此处为 SSH:alias 添加,SSH:alias 添加完成,即安装在 服务器 docker 中,最后重启 VS Code

在这里插入图片描述

安装完成后:在这里插入图片描述

(6)配置 Python 解释器

“Ctrl + Shift + P” ,输入“Python:Select Interpreter”,选择需要的 Python 解释器

在这里插入图片描述

在这里插入图片描述

3.2 简单实例

在完成 3.1 准备工作 后

3.2.1 本地(local)- 远程服务器

(1)在远程服务器安装 VS Code

(2)在远程服务器上的 VS Code 中,Extensions 添加 Remote Development

说明:参考下图,添加并安装完成 Remote Development,进行 reload 或者 重启 VS Code
在这里插入图片描述

(3)Remote Explorer 选择 Dev Containers

说明:参考下图,选择 Dev Containers

在这里插入图片描述

(4)选择 docker_test:1.0,Attach in Current Window

在这里插入图片描述

(5)在 VS Code 中,点击 “File”,并选择 “Open Folder”,打开 远程服务器 docker 的 “home” 路径。

说明:参考下图,打开 远程服务器 docker 的 “home” 路径,其中左下角显示当前连接的 Container 为 docker_test:1.0 (docker_test)

在这里插入图片描述

(6)在 “home” 下新建文件 “test.py”,内容如下:

# -*- coding: utf-8 -*-
# @Last Modified by:   hjw
# @Last Modified time: 2024-02-27 16:00

print("hello, world!")

在这里插入图片描述

在这里插入图片描述

(7)打开 “test.py”,并设置断点,进行调试

在这里插入图片描述

3.2.2 远程(ssh)- 本地计算机

(1)在本地计算机已经连接连接远程服务器 docker后,在本地计算机 VS Code 中,点击 “File”,并选择 “Open Folder”,打开 远程服务器 docker 的 “home” 路径。

在这里插入图片描述

(2)在 “home” 下新建文件 “test.py”,内容如下:

# -*- coding: utf-8 -*-
# @Last Modified by:   hjw
# @Last Modified time: 2024-02-27 16:00

print("hello, world!")

在这里插入图片描述

(3)打开 “test.py”,并设置断点,进行调试

在这里插入图片描述

3.2.3 总结

到此,完成 一个简单的实例,即 VS Code(Visual Studio Code)本地(local)和远程(ssh)Docker Container 下的 Python 开发和调试,然后可以在此基础上进行类推进行更复杂的开发和调试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1485263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试面试精选题:可用性测试主要测试哪些方面,举例说明

1.界面设计: 评估软件的用户界面设计是否直观、美观、易于理解和操作。 测试用例:打开软件,查看界面布局是否合理,各个功能是否容易找到,是否符合用户习惯。 2.导航和布局: 评估用户在软件中导航和查找…

点云数据结构化与体素化理论学习

一、PCD点云数据存储格式的进一步认识 (一)PCD点云存储格式相较于其它存储格式(如PLY、STL、OBJ、X3D等)的优势[1] (1)具有存储和处理有组织的点云数据集的能力,这对于实时应用和增强现实及机器…

【C++】string 类 ( 上)

标准库中的string类 注意: 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 比特就业课 3. string在底层实际是:basic_string模板类的别名,typedef basi…

Python3零基础教程之数学运算专题初阶

大家好,我是千与编程,在上一节课程我们讲解了Python3基础课程中的变量与数据专题项目,本章节中涉及的Python3编程语言中的基础的四则运算、赋值运算符号,赋值运算符号,比较运算符号,位运算符号的计算方法。 这一章的内容算是比较基础的部分,最后需要学会使用即可。以下是…

飞天使-学以致用-devops知识点2-安装sonarqube

文章目录 安装sonarqube查看暴露出去的端口 生成服务token创建webhook服务创建项目 安装sonarqube apiVersion: apps/v1 kind: Deployment metadata:name: postgres-sonarnamespace: kube-devops spec:replicas: 1selector:matchLabels:app: postgres-sonartemplate:metadata:…

物联网与智慧城市:科技驱动下的城市智能化升级之路

一、引言 随着科技的不断进步和城市化进程的加速,物联网与智慧城市的结合已经成为推动城市智能化升级的关键力量。物联网技术以其强大的连接和数据处理能力,为智慧城市的建设提供了无限可能。本文旨在探讨物联网如何助力智慧城市的构建,以及…

实例驱动计算机网络

文章目录 计算机网络的层次结构应用层DNSHTTP协议HTTP请求响应过程 运输层TCP协议TCP协议面向连接实现TCP的三次握手连接TCP的四次挥手断开连接 TCP协议可靠性实现TCP的流量控制TCP的拥塞控制TCP的重传机制 UDP协议 网际层IP协议(主机与主机)IP地址的分类…

朱维群将出席用碳不排碳碳中和顶层科技路线设计开发

演讲嘉宾:朱维群 演讲题目:“用碳不排碳”碳中和顶层科技路线设计开发 简介 姓名:朱维群 性别:男 出生日期:1961-09-09 职称:教授 1998年毕业于大连理工大学精细化工国家重点实验室精细化工专业&…

【ArcGIS Pro二次开发】(83):ProWindow和WPF的一些技巧

在ArcGIS Pro二次开发中,SDK提供了一种工具界面【ArcGIS Pro ProWindow】。 关于ProWindow的用法,之前写过一篇基础的教程: 【ArcGIS Pro二次开发】(13):ProWindow的用法_arcgispro二次开发教程-CSDN博客 主要是对几个常用控件…

Codeforces Round 930 (Div. 2 ABCDEF题) 视频讲解

A. Shuffle Party Problem Statement You are given an array a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​. Initially, a i i a_ii ai​i for each 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n. The operation swap ( k ) \texttt{swap}(k) swap(k) for an…

Java练习(第5天)【总结】在字符串中寻找特定的字符(5种方法)

问题描述:在字符串中寻找特定字符 1、第1次出现位置 实现函数原型: int indexOf(char c) Java代码: import java.io.*; public class Way_1 {public static void main(String args[]){String str "Geeks for Geeks is a computer s…

智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护)

智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护) 边缘小站的主要功能是管理用户在线下部署的整机柜设施,一个边缘小站关联一个华为云指定的区域和一个用户指定的场地,相关的资源运行状况监控等。 边缘计算 迈入5G和AI时代,新…

【嵌入式实践】【芝麻】【设计篇-2】从0到1给电动车添加指纹锁:项目可行性分析

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹,电动车进入P档等待时计时,计时超过5min则自动锁车,计时过程中按刹车可中断P档状态,同时中断锁车计时。改项目我称之为“芝…

Arcgis重分类

对于一张土地分类图,有时需要改变他的类型对应的值,如何在Arcgis中完成这个操作? 有时候,需要对土地利用类型的水土保持因子P进行赋值,林地、草地赋值给1,水田0.15,旱地0.35,水域、…

FreeRTOS学习笔记——FreeRTOS中断管理

什么是中断? 简介:让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断 例: 中断执行机制,可简单概括为三步: 中断优先级分组设置 ARM Cortex-M 使用了 8 位…

抽象类及抽象方法、多态(类,接口)、对象转型(自动,强转)、内部类(成员,静态,接口,局部,匿名内部类)--学习JavaEE的day16

day16 Day16 抽象类及抽象方法 //抽象类 public abstract class 类名{//抽象方法public abstract void method(); }abstract 关键字,用来修饰类和方法 不能与final,static,private一起修饰,不能被重写 抽象类 1.概念&#xff…

2024最新AI系统ChatGPT网站源码, AI绘画系统

一、前言说明 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持…

C# aes加密解密byte数组

using System.Security.Cryptography; using System.Text;namespace AESStu01;public class AesHelper {// AES加密密钥和向量(需要保密) private static readonly string Key "";//16长度字符串数字混合private static readonly string IV …

web漏洞与规避

文章目录 一、XSS 跨站脚本攻击1.1 XSS攻击的主要类型反射型XSS存储型XSSDOM型XSS 1.2 前端开发如何应对XSS 二、CSRF 跨站请求伪造2.1 CSRF例子2.2 前端开发如何应对CSRF 三、SQL 注入3.1 前端如何防御SQL注入 四、前端如何使用CSP 一、XSS 跨站脚本攻击 攻击者通过在受害者的…

Kubernetes 学习总结(46)—— Pod 不停重启问题分析与解决

我们在做性能测试的时候,往往会发现我们的pod服务,频繁重启,通过kubectl get pods 命令,我们来逐步定位问题。 现象:running的pod,短时间内重启次数太多。 定位问题方法:查看pod日志 kubectl get event …