【教程】一键完成进入Docker并激活Conda虚拟环境

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~

目录

背景说明

脚本配置

详细解释

指令介绍

执行流程总结

为什么这样设计

验证方法


背景说明

        原始情况下,每次都需要 “进入docker => 进入目录 => 激活conda” 这几个步骤,非常繁琐。如何通过执行shell脚本,一键完成上述步骤?


脚本配置

脚本内容,enter_docker.sh

#!/bin/bash# 定义容器名称(视情况修改)
CONTAINER_NAME="cu12_docker"# 定义目录路径(视情况修改)
DIRECTORY_PATH="/mnt/disk/proj"# 定义conda初始化脚本路径(视情况修改)
CONDA_INIT="/root/miniconda3/etc/profile.d/conda.sh"# 定义conda环境名称(视情况修改)
CONDA_ENV_NAME="py39"# 进入docker容器并执行命令(通常无需修改)
docker exec -it $CONTAINER_NAME /bin/bash -c "source $CONDA_INIT &&cd $DIRECTORY_PATH &&conda activate $CONDA_ENV_NAME &&export PS1='(${CONDA_ENV_NAME}) \u@\h:\w\$ ' &&exec /bin/bash --norc
"

给可执行权限:

chmod +x enter_docker.sh

以后每次只需要以下命令,即可完成上述步骤:

./enter_docer.sh

详细解释

指令介绍

docker exec -it $CONTAINER_NAME /bin/bash -c "..."

  • 作用:在 Docker 容器 $CONTAINER_NAME 中启动一个交互式 bash 终端。
  • -i:保持标准输入打开,支持交互。
  • -t:分配一个伪终端,确保终端可用。
  • /bin/bash -c:运行指定的命令字符串。

source $CONDA_INIT

  • 作用:加载 Conda 初始化脚本,使 conda 命令可用。
  • 背景:Conda 的激活依赖于 conda.sh,这通常位于 Conda 安装目录下的 etc/profile.d/conda.sh 中。

cd $DIRECTORY_PATH

  • 作用:切换到指定的工作目录 $DIRECTORY_PATH
  • 背景:这是用户自定义的目录,用于运行代码或执行其他任务。

conda activate $CONDA_ENV_NAME

  • 作用:激活指定的 Conda 虚拟环境 $CONDA_ENV_NAME
  • 背景:在 Conda 中,激活一个虚拟环境会调整 PATH 环境变量,使 Python 和其他工具使用该环境下的版本。
  • 注意conda activate 需要一个已初始化的 shell 环境(即必须先执行 source 加载 Conda 配置)。

export PS1='(${CONDA_ENV_NAME}) \u@\h:\w\$ '

  • 作用:手动设置 shell 的提示符格式,显示当前激活的 Conda 环境名。
  • 解释
    • (${CONDA_ENV_NAME}):显示当前环境名(如 dglv2)。
    • \u:当前用户。
    • \h:主机名。
    • \w:当前工作目录。
  • 背景:当 Conda 环境被激活时,通常会自动更新提示符,但在某些情况下(如 Docker 中的非交互式 shell),需要手动设置。

exec /bin/bash --norc

  • 作用:启动一个新的 bash shell,并用它替换当前 shell。
  • exec:用新的 bash 进程替换当前 shell,而不是开启子 shell。这避免了环境变量和其他设置被覆盖的问题。
  • --norc:告诉新的 bash 不加载 .bashrc 或其他初始化文件,防止 Conda 初始化脚本再次被加载,从而覆盖现有的激活状态。

执行流程总结

  1. 加载 Conda 初始化脚本,确保 conda 命令可用。
  2. 切换到指定目录,为后续操作做好准备。
  3. 激活指定虚拟环境,使当前 shell 使用目标环境的工具链。
  4. 设置提示符,清晰标识当前环境。
  5. 启动一个新的 bash 进程,以保持环境激活状态,同时避免重复加载初始化文件。

为什么这样设计

  • 避免环境丢失:通过 exec /bin/bash 替换当前 shell,确保激活状态继承,而不是创建新的子 shell 导致设置丢失。
  • 防止配置冲突:使用 --norc 避免重复加载 .bashrc
  • 保持交互性:提示符会反映当前的 Conda 环境,方便操作。

验证方法

  1. 运行命令后,查看提示符是否正确显示 (dglv2)
  2. 运行以下命令检查是否在目标环境中:
    conda info
    确认 active environment 是否为 dglv2

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL 进阶之路】事务并发情况分析

MySQL事务并发控制分析笔记 在数据库系统中,事务并发控制至关重要,能够确保多个事务并发执行时的数据一致性、隔离性和正确性。MySQL通过不同的锁机制控制并发操作,以确保事务的隔离性。以下是对事务A和事务B并发行为的详细分析,…

NanoLog起步笔记-6-StaticLogInfo

nonolog起步笔记-6-StaticLogInfo StaticLogInfo文件名和行号文件名和行号的传入log参数 RuntimeLogger::registerInvocationSitelogid为什么只能被赋一次值 reserveAlloc加入消息头finishAlloc返回 StaticLogInfo 写C语言编译前端时,给我印象深刻的一部分是&#…

不是“我应该做什么”,而是“我想做什么”

1. 识别内心的渴望 首先,我们需要识别自己真正的愿望和激情所在。这可能需要一些时间和自我反思。问自己:在没有任何外界压力的情况下,我真正想做的是什么?是赚钱、生活、旅行、追星,还是其他什么?识别这些…

Java-JMX (官方文档解读)

JMX 简介 JMX(Java Management Extensions)是Java平台的一个标准管理框架,自Java 1.5版本起成为Java 平台标准版 (Java SE 平台) 的标准组成部分。JMX 技术提供了一种简单、标准的方法来管理资源(例如应用程序、设备和服务&#x…

商品期权开户条件是什么?

商品期权开户条件是什么? 商品期权是一种金融衍生品,它赋予期权持有者在特定日期(欧式期权)或在特定日期之前(美式期权),以特定价格(行权价格)买入或卖出一定数量的某种…

RISC-V IO 虚拟化架构在 X100 芯片上的实现

安全之安全(security)博客目录导读 本篇博客,我们聚焦RISC-V 2024中国峰会上RISC-V虚拟化相关专题中的IOMMU虚拟化在X100芯片上的实现,来自进迭时空郑律老师。 我们先来看下X100的RISC-V芯片和已有的关于处理器内核虚拟化和内存虚拟化相关的支持 关于IOMMU的特性支持,下图红…

Windows 系统没有网络链接常见原因以及解决方案

在使用 Windows 电脑时,有时会遇到电脑显示已连接网络,但却无法访问 Internet 的情况,这可能是由多种原因导致的。以下简鹿办公将详细介绍一些常见原因及对应的解决方案。 一、网络连接问题 原因 路由器故障:路由器长时间运行可…

【Rive】事件回调

1 前言 Android 中可以通过 RiveAnimationView 的 addEventListener 方法添加动画监听器,用于监听状态动画和过渡动画的开始和结束时机,实现动画开始和结束时的事件回调;也可以监听 Rive 事件触发的时机,在事件触发时响应回调。 …

Springboot3整合Redis

书接上篇《Redis 安装篇&#xff08;阿里云服务器&#xff09;_阿里云安装redis-CSDN博客》&#xff0c;安装好Redis后&#xff0c;就需要在springboot项目中使用Redis了。 一、SpringBoot整合Redis 1.添加坐标 <!--redis--> <dependency><groupId>org.sp…

REDMI瞄准游戏赛道,推出小屏平板

近日&#xff0c;REDMI推出了一款8.8英寸的小屏平板&#xff0c;引发市场关注。该平板采用LCD屏幕&#xff0c;搭载天玑9400处理器&#xff0c;定位游戏市场&#xff0c;意在开拓小屏平板的新领域‌。 ‌小屏平板新尝试‌ 这款REDMI平板未追随大屏潮流&#xff0c;而是选择了8…

在Ubuntu上使用docker compose安装N卡GPU的Ollama服务

在现代计算环境中,利用 GPU 进行计算加速变得越来越重要。下面将讲解如何在Ubuntu上使用docker compose安装N卡GPU的Ollama服务。 1、安装 NVIDIA 容器工具 首先,需要确保你的系统已经安装了 NVIDIA 容器工具 nvidia-container-toolkit。这是让 Docker 容器访问 GPU 的关键…

OllyDbg、CE简单介绍

基础知识&#xff1a; 想要破解软件&#xff0c;需要一些基础知识&#xff1a; 文件格式&#xff1a;Windows对应PE、Linux对应ELF、IOS对应Mash-0。文件格式是指操作系统规定的每个段&#xff08;代码段、数据段、堆、栈&#xff09;的大小、顺序等信息。 汇编语言&#xff1…

泷羽sec学习打卡-brupsuite4

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-proxy proxyInterceptHTTP history/WebSocket history&#xff08;历史记录&a…

Wallpaper壁纸制作学习记录10

图像准备 外部图像编辑器快速访问 Wallpaper Engine 允许您配置自己喜欢的外部图像编辑器&#xff0c;以用作补充图像编辑工具&#xff0c;您可以在整个编辑器中快速访问该工具。 您可以在Wallpaper Engine 编辑器中配置您选择的图像编辑器&#xff0c;通过顶部的文件菜单&am…

【C++算法】36.位运算_只出现一次的数字 II

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;解析 题目链接&#xff1a; 137. 只出现一次的数字 II 题目描述&#xff1a; 解法 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。说明时间复杂度O(n)&#xff0c;空间复杂…

transformer学习笔记-自注意力机制(1)

自注意力机制&#xff0c;可以说是transformer中最核心的部分之一&#xff0c;注意力机制&#xff0c;主要是在处理序列数据时&#xff0c;根据序列数据提供的上下文环境信息识别需要关注的特征数据&#xff0c;注意力机制通常用于不同序列之间的交互&#xff0c;表示不同序列环…

日志基础示例python和c++

文章目录 0. 引言1. python2. c 0. 引言 本文主要记录python版本和c版本常用的日志基础示例。 1. python python版本常用的是logging库&#xff0c;结合colorlog库&#xff0c;可根据不同日志级别打印不同颜色的日志&#xff0c;为了便于分析问题&#xff0c;还添加了日志保…

TimeXplusplus——提高时间序列数据的可解释性,避免琐解和分布偏移问题的深度学习可解释性的框架

摘要 论文地址&#xff1a;https://arxiv.org/abs/2405.09308 源码地址&#xff1a;https://github.com/zichuan-liu/timexplusplus 信号传输技术的优化对于推动光通信的发展至关重要。本文将详细探讨线路编码技术的目标及其实现方式。线路编码旨在提高带宽和功率效率&#xf…

python爬虫--某房源网站验证码破解

文章目录 使用模块爬取目标验证码技术细节实现成果代码实现使用模块 requests请求模块 lxml数据解析模块 ddddocr光学识别 爬取目标 网站验证码破解思路是统一的,本文以城市列表为例 目标获取城市名以及城市连接,之后获取城市房源信息技术直接替换地址即可 验证码 技术…

TimesFM模型论文内容

全文总结 这篇论文提出了一种基于解码器架构的时间序列预测基础模型TimesFM&#xff0c;旨在通过零样本学习在多种公共数据集上实现接近于监督学习模型的预测精度。 研究背景 研究问题&#xff1a;这篇文章要解决的问题是如何设计一个时间序列基础模型&#xff0c;使其在零样…