在ubuntu下linux中,如何在shell脚本中使用conda activate?编写了shell代码无法自动加载.bashrc

在shell脚本里面调用conda创建的环境 推荐用conda run 阅读详情

问题描述

前两天换了新主机,在主机中启用conda虚拟环境,无法启用,需要初始化conda,但是bashrc有初始化代码

怀疑是没有启动bashrc,因此在bashrc中最后一行加入

echo ".bashrc loaded"

运行shell脚本,没有输出,确定是无运行

检查bashrc文件,发现开头有

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

这是为了防止bashrc在非交互界面自动启动的,于是将echo代码写在这里的前面

还是没用

手动加载bashrc呢?

source ~/.bashrc

确实打印输出了,但是依然不完美

  1. bashrc文件中有防止非交互运行的代码
  2. bash启动一个shell脚本,会启用一个子shell来运行,而子shell会继承父shell的环境变量(?或者只是conda环境)
  3. 在shell脚本的开始手动初始化conda吧

更新:在第二天解决了这个问题,询问了chatgpt

首先,发现source activate 是可用的

询问了chatgpt

其次,询问了chatgpt,应该使用

# 初始化 Conda 环境
eval "$(conda shell.bash hook)"
conda activate xxx

为什么eval "$(conda shell.bash hook)"?官方文档具体在哪里?

ChatGPT 说:

ChatGPT

解释:eval "$(conda shell.bash hook)" 的作用

当你在 shell 中运行 eval "$(conda shell.bash hook)" 时,Conda 会动态注入所需的环境配置脚本,从而允许使用 conda activate 和 conda deactivate 命令。这是因为:

  1. Conda 初始化环境:

    • conda activate 命令在新版 Conda 中(4.4 版本及之后)不再是简单的 shell 函数调用,而是依赖于 Conda 的 hook 脚本来完成环境切换。这个脚本需要在当前 shell 环境中被加载,eval "$(conda shell.bash hook)" 就是实现这一加载的命令。
  2. 避免修改全局配置文件:

    • 使用 conda init 会修改用户的 ~/.bashrc 或 ~/.zshrc 文件,从而在每次打开新的 shell 时自动初始化 Conda 配置。而 eval "$(conda shell.bash hook)" 是一种更灵活的方式,不需要修改全局配置文件,可以直接在脚本中使用。
  3. shell hook 的作用:

    • conda shell.bash hook 会输出一段 shell 脚本,eval 命令会执行这段脚本,使得 conda 命令可以在当前 shell 会话中正确工作。这段脚本主要包括环境路径设置和函数定义等内容。

官方文档位置

你可以在 Conda 官方文档的 "Command Reference" 和 "Managing environments" 部分找到关于 shell hook 的说明:

  • Shell Hook 文档:Conda Shell Hook 官方文档

文档片段示例

根据官方文档:

To enable the conda activate command in a script or non-interactive shell, run:

bash

eval "$(conda shell.bash hook)" conda activate myenv

This command initializes Conda's functions in the current shell session without requiring a restart.

解决问题的根本原因

如果你不使用 eval "$(conda shell.bash hook)",那么 conda activate 会在非交互式 shell 中失效,这是因为:

  • 在非交互式 shell 中(例如 shell 脚本中),默认不会加载 ~/.bashrc 配置文件,而这个文件通常包含了 Conda 的初始化配置。
  • eval "$(conda shell.bash hook)" 在当前 shell 会话中动态加载了这些初始化配置,使 conda activate 可以正常工作。

推荐用法

在 shell 脚本或非交互式环境中,使用以下模板来激活 Conda 环境:

bash

#!/bin/bash # 初始化 Conda 环境 eval "$(conda shell.bash hook)" # 激活目标环境 conda activate DVR # 继续执行其他命令 python your_script.py

这种方式是 Conda 官方推荐的做法,兼容性好且避免了修改全局配置文件。

Ubuntu 20.04 安装 Miniconda/Anaconda 实操指南:解决 conda activate 失败与环境配置问题 conda 是 Python 科学计算领域主流的跨平台包与环境管理工具,其核心原理是通过独立 Python 解释器、隔离的虚拟环境和声明式依赖解析实现环境可重现性。技术价值在于规避系统 Python 冲突、支持多版本 Python 共存、简化 CUDA/PyTorch 等复杂依赖部署。典型应用场景包括 Ubuntu 20.04 服务器部署数据科学栈、AI 实验室配置 PyTorch 环境、VS Code/PyCharm 集成调试及 Jupyter 内核管理。本文聚焦 Ubuntu 20.04 LTS 系统下 阅读详情

相关推荐

Ubuntu 20.04 安装 Anaconda 常见失败原因与 Shell 加载链修复

Anaconda 是 Python 科学计算环境的核心分发平台,其本质是一套依赖 Shell 初始化机制的环境管理协议。在 Ubuntu 20.04 中,conda 命令不可用的根本原因并非安装包错误,而是 bash 的加载链断裂——特别是 ~/.profile 与 ~/.bashrc 的调用关系未对齐,导致 conda.sh 初始化脚本无法被加载。该问题直接影响 Jupyter Notebook 启动、PyTorch 环境配置及 VS Code Python 解释器识别等关键场景。本文聚焦 Ubuntu

weixin_34268753的博客 480

在 shell 脚本中加入激活 conda 虚拟环境的代码

在 shell 脚本中加入激活 conda 虚拟环境的代码

engchina的专栏 1164

Linux Mint 安装 Anaconda 的完整指南:从环境初始化到 conda 命令生效

Anaconda 是 Python 科学计算与数据科学的核心环境管理工具,其本质是通过 shell 初始化机制(如 .profile 或 .bashrc)向系统 PATH 注入可执行路径,并加载 conda.sh 初始化脚本,从而实现跨项目、跨版本的 Python 环境隔离。这一过程高度依赖 Linux 用户会话的启动生命周期,尤其在基于 Ubuntu 的发行版如 Linux Mint 中,因默认采用登录 shell 加载 ~/.profile 而非 ~/.bashrc,导致 conda 命令常出现‘安装成

chouxuyi9789的博客 465

Shell脚本

1、举个示例,创建文件run.sh: (1) 先进入命令行 #! /bin/bash (2)切换当前虚拟环境,去 ~/.bashrc 中导入conda的path路径配置如下: (3)命令切换虚拟环境,执行文件 #! /bin/bash # conda activate py368 # >>> conda initialize >>> # !! ...

feifeiyechuan的博客 571

Ubuntu 18.04 安装 Anaconda/Miniconda 避坑指南:shell、PATH 与镜像源三大核心问题

Anaconda 是 Python 科学计算环境的事实标准,其核心是 conda 包管理器与隔离的 Python 运行时。在 Linux 系统中,conda 的正确运行高度依赖 shell 解析能力、PATH 环境变量加载顺序及远程仓库连通性。Ubuntu 18.04 因默认使用 dash 作为 /bin/sh、系统级 PATH 初始化机制特殊、以及国内直连官方源严重受限,成为 conda 部署故障高发平台。本文聚焦 Ubuntu 18.04 这一经典 LTS 版本,深入解析 bash 与 dash 兼容性

weixin_34121282的博客 2161

Miniconda3 安装备忘:解决 conda command not found 与 shell 初始化失效

Miniconda3 是 Python 环境管理的核心工具,其本质是为操作系统构建轻量级 Python 运行时与隔离沙盒。安装原理在于三步协同:二进制部署、shell 初始化链注入(如 ~/.zshrc 中的 PATH 和 conda 函数定义)、以及环境变量与 hook 的持久生效。技术价值体现在避免依赖冲突、支持多版本 Python 共存,并为数据科学、AI 开发等场景提供可复现的环境基础。典型问题如 'zsh: command not found: conda' 或 'conda init 报错',实

weixin_33816300的博客 427

【Linux中shell命令】.sh文件种种操作

【Linux中shell命令】.sh文件种种操作

a_piece_of_ppx的博客 1万+

Ubuntu 16.04 安装 Anaconda 详细避坑指南

Anaconda 是 Python 科学计算环境的核心分发平台,其本质是通过 conda 实现跨平台、可复现的包与环境管理。在老旧系统如 Ubuntu 16.04 上部署时,因 glibc 2.23、OpenSSL 1.0.x 等底层库版本限制,以及 EOL 后 apt 源失效、shell 初始化链异常等兼容性问题,极易导致 conda activate 失败或内核静默崩溃。技术价值在于保障遗留系统中 Python 环境的稳定性与可维护性;典型场景包括工业控制系统运维、高校实验教学环境搭建及 conda 底

ciqiaofu0192的博客 438

shell中开启conda虚拟环境

eval "$(conda shell.bash hook)" conda activate <env-name>

jiangjiane 3381

window11使用wsl2安装Ubuntu22.04及conda、cuda等

了解使用适用于Linux的Windows子系统(WSL)时访问网络应用程序的注意事项。适用于Linux的Windows子系统(WSL)中基本命令的参考。使用WSL访问网络应用程序|MicrosoftLearn。wsl2docker、cudatoolkit等安装。WSL的基本命令|MicrosoftLearn。子系统linux使用window网络代理、网络配置。wsl2Ubuntuminiconda安装。windows与子系统Linux文件访问。

鲨鱼儿的博客 7724

Miniconda3 安装避坑指南:PATH注入、Shell函数与环境隔离原理

Miniconda3 是 Python 工程中实现环境隔离与依赖管理的核心工具,其本质是一套基于 Shell 函数动态修改 PATH 的轻量级环境调度系统。它不依赖系统 Python,而是通过初始化脚本在 ~/.zshrc 等配置文件中注入函数定义与路径前缀,使 conda activate 能实时切换解释器路径。技术价值在于进程级环境隔离、硬链接复用节省空间、跨平台一致的包管理能力。典型应用场景包括数据科学项目搭建、多版本 Python 兼容测试、CI/CD 环境标准化及 VS Code 编辑器 Pyth

weixin_33957648的博客 473

Ubuntu 18.04 安装 Anaconda 后 conda 命令失效的根因与 conda init 全链路解析

conda 是 Python 科学计算生态的核心环境管理工具,其本质是通过 shell 初始化机制将命令与函数注入运行时环境;在 Ubuntu 18.04 中,因默认使用 dash 作为 /bin/sh、login shell 与 non-login shell 配置文件加载路径分离(如 ~/.profile 与 ~/.bashrc)、以及 Anaconda 安装器默认仅修改当前终端配置等设计差异,导致 conda 命令在新终端、SSH、cron 等场景下不可见;技术价值在于厘清 shell 启动流程、PA

weixin_30562507的博客 401

Ubuntu 20.04下Anaconda科学计算环境搭建与conda虚拟环境配置

Python虚拟环境是解决依赖冲突与版本隔离的基础技术,其核心原理在于路径隔离与运行时上下文控制。conda作为跨语言二进制包管理器,不仅提供比venv更彻底的环境隔离(涵盖C库、CUDA、BLAS等系统级依赖),还通过通道(channel)机制实现可复现的包分发。该技术显著提升科研与工程场景下的环境稳定性、协作效率与跨平台一致性,广泛应用于PyTorch/TensorFlow深度学习开发、OpenCV计算机视觉、Jupyter交互式分析及VS Code/PyCharm IDE集成等典型工作流。本文聚焦Ub

A458545418的博客 477

解决终端配置不生效:深入理解Shell启动流程与配置文件加载

在Linux和macOS系统中,Shell环境配置是开发者和系统管理员日常工作的基础。Shell启动时,会根据其类型(登录Shell或非登录Shell)按特定顺序读取配置文件,如.bashrc、.bash_profile等,以初始化环境变量、别名和函数。理解这一原理对于构建稳定、可复用的开发环境至关重要,能有效避免配置不生效、环境不一致等问题。通过建立配置文件间的正确调用链,可以确保自定义配置在任何交互式Shell中自动加载,从而提升工作效率。本文聚焦于Shell配置加载的核心机制,并针对常见的.bashr

leonard61306500的专栏 393

Linux Mint 安装 Anaconda 常见问题与深度修复指南

Anaconda 是 Python 数据科学生态的核心环境管理工具,其本质是基于 conda 包管理器构建的跨平台发行版,依赖 shell 初始化、PATH 注入和动态库兼容性三大机制。在 Linux 发行版中,因默认 shell 配置、系统级 bashrc 模板逻辑及终端启动模式差异,极易引发 conda 命令不可用、环境不激活、PATH 未生效等典型故障。尤其在基于 Ubuntu 22.04 的 Linux Mint 21.x 系统中,/etc/skel/.bashrc 条件加载逻辑与 conda in

weixin_33978044的博客 471

Ubuntu 20.04 安装 Anaconda 正确实践:避坑指南与环境隔离原理

Anaconda 是一个自包含的 Python 发行版,而非传统 Linux 软件包,其核心价值在于提供跨平台、可复现、强隔离的科学计算环境。它通过用户级安装路径(如 ~/anaconda3)、独立依赖树和 conda 虚拟环境机制,彻底绕开系统 Python,实现多版本共存与项目级环境隔离。这种设计对 Ubuntu 20.04 等 LTS 系统尤为重要——既保障长期稳定性,又支持机器学习、数据科学等动态演进的技术栈。实际应用中,需严格遵循官方 bash 脚本安装、SHA256 校验、-b/-p 参数化部署

weixin_30596343的博客 737

Ubuntu 18.04 安装 Anaconda 精准避坑指南

Anaconda 是面向数据科学的 Python 包与环境管理平台,其核心原理是通过独立于系统 Python 的隔离式运行时(含 conda、Python 解释器及预编译二进制包)实现跨项目依赖解耦。技术价值在于规避 apt/pip 混用导致的版本冲突、动态库不兼容与 PATH 污染,尤其适配老旧但仍在工业边缘场景广泛部署的 Ubuntu 18.04 系统。典型应用场景包括 PyTorch 环境配置、PyCharm/VS Code IDE 集成、WSL2 子系统部署及离线安装——这些正是‘anaconda下

weixin_34101229的博客 420

STM32F103 CAN通信避坑指南:从标准库配置到收发测试的完整流程

本文详细介绍了STM32F103 CAN通信的实现流程,从标准库配置到收发测试,帮助开发者避开常见陷阱。内容涵盖硬件连接、波特率计算、过滤器配置及错误处理等关键环节,提供实用的代码示例和调试技巧,确保CAN通信的稳定性和可靠性。

weixin_30627341的博客 324

Linux下fastai课程环境搭建:CUDA 11.8+conda+Ubuntu 22.04全链路指南

深度学习环境配置是AI工程实践的基石,其本质是CUDA工具链、GPU驱动、Python包管理与操作系统内核的协同适配。理解CUDA版本兼容性、conda依赖求解原理及Linux动态链接机制(如libcudnn.so符号链接),是解决PyTorch GPU不可用、import失败、kernel死亡等高频问题的关键。技术价值在于建立可复现、可诊断、可迁移的开发环境——避免因nvcc与nvidia-smi版本错位或LD_LIBRARY_PATH配置缺失导致的隐性故障。典型应用场景包括fast.ai课程运行、Jup

weixin_33804582的博客 901

基于C#的软PLC梯形图编辑器开发实战

本文详细介绍了基于C#开发软PLC梯形图编辑器的实战过程。文章从核心数据结构设计入手,阐述了如何利用C#的面向对象特性构建梯形图元素模型,并实现了图形编辑、指令表输入、逻辑连接拓扑重建等关键功能。重点剖析了模拟PLC执行引擎的扫描周期与能流传递算法,让梯形图逻辑在PC上“活”起来。最后探讨了定时器指令实现、性能优化及项目集成等进阶内容,为工业自动化软件集成提供了灵活高效的解决方案。

weixin_28314575的博客 404

Autodesk Genuine Service卸载失败?试试这个隐藏文件删除法(Win8-Win11通用)

本文针对Autodesk Genuine Service在Windows系统(Win8-Win11)中卸载失败的常见难题,提供了深度解析与根治方案。核心方法是手动定位并删除两个关键的隐藏文件(ProductInformation.pit和id.dat),以解除文件锁定或数据损坏导致的卸载障碍,随后再通过标准流程即可成功卸载。该方法通用性强,能有效解决这一困扰设计师和工程师的顽固问题。

weixin_29220405的博客 1474
上一篇: gatk GetPileupSummaries报错:Exception in thread “main“ java.lang.OutOfMemoryError: Java heap space
下一篇: 如何免密登录ssh主机?都设置好了还需要输入密码?试试添加以下两行
起个啥名捏
博客等级 码龄6年 27粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值