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

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 开发和调试,然后可以在此基础上进行类推进行更复杂的开发和调试。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

揭示IP风险画像的作用与价值

在当今数字化时代,互联网的快速发展为企业和个人带来了巨大的机遇,同时也带来了各种安全风险和威胁。随着网络攻击手段的不断升级和演变,传统的安全防御手段已经无法满足对抗复杂多变的网络威胁的需求。IP风险画像作为一种新型的网络安全解决…

24计算机考研深大经验分享(计算机专业考研综合安排)

文章目录 背景科目选择高数选课一轮二轮冲刺阶段 线代一轮二轮 概率论计算机学科专业基础408数据结构计算机组成原理操作系统计算机网络总结 英语政治 末言 背景 首先贴一下初试成绩。这篇分享主要是给零基础的同学使用的,基础好的同学可以自行了解补充一下&#xf…

[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式

前言: 为什么之前写过Golang 版的设计模式,还在重新写Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很…

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

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

unity 场景烘焙中植物叶片(单面网络)出现的白面

Unity版本 2021.3.3 平台 Windows 在场景烘焙中烘焙植物的模型的时候发现植物的叶面一面是合理的,背面是全白的,在材质球上勾选了双面烘焙,情况如下 这个问题可能是由于植物叶片的单面网格导致的。在场景烘焙中,单面网格只会在一…

区块链游戏解说:什么是 Arcade Champion

作者:lesleyfootprint.network 编译:cicifootprint.network 数据源:Arcade Champion Dashboard 什么是 Arcade Champion Arcade Champion 代表了移动游戏世界的重大革新。它将经典街机游戏的怀旧与创新元素结合在一起,包括 NF…

创建型设计模式 - 建造者设计模式 - JAVA

建造者设计模式 一. 简介二. 使用场景分析三. 代码案例3.1 创建ComputerBuilder 类3.2 修改子类3.3 修改工厂3.4 测试 四. 建造者模式案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都…

Unity中的UI系统之GUI

目录 概述工作原理和主要作用基础控件重要参数及文本和按钮多选框和单选框输入框和拖动条图片绘制和框 复合控件工具栏和选择网络滚动视图和分组窗口 自定义整体样式自定义皮肤样式 概述 什么是UI系统 UI是User Interface(用户界面)的简称,用…

Bert基础(五)--解码器(下)

1、 多头注意力层 下图展示了Transformer模型中的编码器和解码器。我们可以看到,每个解码器中的多头注意力层都有两个输入:一个来自带掩码的多头注意力层,另一个是编码器输出的特征值。 让我们用R来表示编码器输出的特征值,用M来…

Unity安装与简单设置

安装网址:https://unity.cn 设置语言: 设置安装位置:否则C盘就会爆了 获取一个个人的资格证: 开始安装: 安装完毕。 添加模块:例如简体中文 新建项目: 布局2*3、单栏布局、 设置…

el-table实现转置表格

vue版本&#xff1a;vue2.6.10 elementui版本&#xff1a;2.15.14 实现效果&#xff1a;el-table实现行列互换 代码&#xff1a; <template><div class"app-container"><span>原始数据</span><el-table:data"datas"border>…

循环结构:for循环,while循环,do-while,死循环

文章目录 for循环for案例&#xff1a;累加for循环在开发中的常见应用场景 whilewhile循环案例&#xff1a; for和while的区别&#xff1a;do-while三种循环的区别小结死循环 快捷键 ctrlaltt for循环 看循环执行多少次&#xff0c;就看有效数字有几个 快捷键 fori 示例代码&am…

Netty01NIO

NIO基础 NIO &#xff1a;non-blocking io 非阻塞 IO 笔记 www.zgtsky.top 网课&#xff1a;黑马Netty 三大组件 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以…

工作微信统一管理(还带监管功能)

1.会话页面(可统一管理多个微信号、聚合聊天、手动搜索添加好友、通过验证请求、查看好友的朋友圈等) 2.聊天历史(可查看 所有聊天记录&#xff0c;包括手机.上撤回、删除的消息) 3.群发助手(可以一 -次群发多个好友和群&#xff0c;还可以选择定时发送&#xff0c;目前还在内测…

docker (十二)-私有仓库

docker registry 我们可以使用docker push将自己的image推送到docker hub中进行共享&#xff0c;但是在实际工作中&#xff0c;很多公司的代码不能上传到公开的仓库中&#xff0c;因此我们可以创建自己的镜像仓库。 docker 官网提供了一个docker registry的私有仓库项目&#…

微服务之qiankun主项目+子项目搭建

主项目使用history&#xff0c;子项目使用hash模式 1. 下载安装"qiankun": "^2.10.13"2. 手动调用qiankun,使用vue脚手架搭建的项目1. 主项目配置&#xff08;我使用的是手动调用乾坤&#xff0c;在指定页面显示内容&#xff09;1. 要使用的页面中引入乾坤…

蓝桥杯备战刷题three(自用)

1.合法日期 #include <iostream> #include <map> #include <string> using namespace std; int main() {map<string,int>mp;int days[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i1;i<12;i){for(int j1;j<days[i];j){string sto_strin…

Word | 论文使用 Springer LNICST 工具包进行格式化

目录 Step1&#xff1a;下载 Springer LNICST 工具包 Step2&#xff1a;导入宏文件 Step3&#xff1a;处理导入失败&#xff08;大概意思是这个宏不安全&#xff09; Step4&#xff1a;导入成功并使用 Step1&#xff1a;下载 Springer LNICST 工具包 会议官网的 SUBMISSIO…

合唱队形洛谷

这题的状态转移方程为dp[i]max(dp[i]&#xff0c;dp[j]1) 因而可以有代码 #include<iostream> #include<algorithm> using namespace std; int arr[102][2]; int a[102]; int main() { int n; cin >> n; for (int i 1; i < n; i) { cin >>…

1、docker入门

文章目录 1、tocker简介2、tocker的安装&环境配置2、配置阿里云镜像3、基本命令1、镜像命令2、docker基本命令3、镜像基本命令4、Docker 容器常用命令 1、tocker简介 新一代的虚拟化技术 2、tocker的安装&环境配置 uname -r1、首先查看liunx的内核 yum update -y2、更…