Zsh/Bash Conda设置延迟启动,启动速度优化

news2025/6/3 23:56:31

Zsh/Bash 启动速度优化

在安装完 Conda 之后,会发现每次启动 Zsh/Bash 的时候都需要加载时间,这个时候就会发现没有以前流畅了,原因是因为每次启动 Shell 时都需要去加载 Conda 环境,才能保证每次可以使用工具。然而官方自带的安装脚本在安装后都是强制每次启动 shell 时直接加载环境,会导致每次启动被拖慢,需要很多等待时间。本文提供延迟启动的方法,以提升每次的启动速度。

测试速度

首先需要分析是什么拖慢了启动时间,除了 Conda 作为主要拖慢启动的进程,可能还有其他。这里以 Zsh 为例,在启动脚本 ~/.zshrc 开头中添加:

zmodload zsh/zprof

末尾添加:

zprof

最终可以看到输出,这里可以看到 nvm 和 conda 在 zsh 启动时占用了绝大部分时间。

num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    2         291.99   146.00   48.89%    155.93    77.97   26.11%  nvm
 2)    1         114.14   114.14   19.11%    114.14   114.14   19.11%  compdump
 3)    1         118.46   118.46   19.83%    102.74   102.74   17.20%  nvm_ensure_version_installed
 4)    1         348.41   348.41   58.34%     56.42    56.42    9.45%  nvm_auto
 5)    1         199.97   199.97   33.48%     40.39    40.39    6.76%  compinit
 6)  815          37.68     0.05    6.31%     37.68     0.05    6.31%  compdef
 7)    1          15.71    15.71    2.63%     15.71    15.71    2.63%  nvm_is_version_installed
 8)    1          13.56    13.56    2.27%     13.56    13.56    2.27%  zrecompile
 9)    1          17.52    17.52    2.93%     12.53    12.53    2.10%  nvm_die_on_prefix
10)   22          14.00     0.64    2.34%     11.00     0.50    1.84%  _omz_source
11)    2           9.26     4.63    1.55%      9.26     4.63    1.55%  __sdkman_export_candidate_home
12)    2           8.36     4.18    1.40%      8.36     4.18    1.40%  compaudit
13)    2           5.98     2.99    1.00%      5.98     2.99    1.00%  __sdkman_prepend_candidate_to_path
14)    2           4.76     2.38    0.80%      4.76     2.38    0.80%  nvm_grep
15)    1           4.15     4.15    0.70%      4.15     4.15    0.70%  (anon)
16)    1           1.77     1.77    0.30%      1.77     1.77    0.30%  test-ls-args
17)    1           5.68     5.68    0.95%      1.53     1.53    0.26%  handle_update
18)    1           0.30     0.30    0.05%      0.30     0.30    0.05%  colors
19)    6           0.28     0.05    0.05%      0.28     0.05    0.05%  is-at-least
20)    4           4.99     1.25    0.84%      0.23     0.06    0.04%  nvm_npmrc_bad_news_bears
21)    4           0.14     0.04    0.02%      0.14     0.04    0.02%  add-zsh-hook
22)    3           0.12     0.04    0.02%      0.12     0.04    0.02%  bashcompinit
23)    2           0.18     0.09    0.03%      0.09     0.04    0.01%  complete
24)    1           0.08     0.08    0.01%      0.08     0.08    0.01%  nvm_has
25)    1         348.44   348.44   58.34%      0.03     0.03    0.01%  nvm_process_parameters
26)    3           0.03     0.01    0.00%      0.03     0.01    0.00%  is_theme
27)    2           0.02     0.01    0.00%      0.02     0.01    0.00%  is_plugin
28)    2           0.01     0.01    0.00%      0.01     0.01    0.00%  __sdkman_echo_debug
29)    1           0.01     0.01    0.00%      0.01     0.01    0.00%  nvm_is_zsh
30)    2           0.01     0.00    0.00%      0.01     0.00    0.00%  env_default

-----------------------------------------------------------------------------------

优化

将 Anaconda 和 NVM 设置成延迟启动,也就是只有在使用时加载环境,这样避免每次启动 zsh 就自动加载环境占用时间。

Anaconda 加载

# >>> conda initialize >>>
lazy_load_conda() {
  unalias conda 2>/dev/null
  
  # 初始化 conda
  __conda_setup="$('/home/cacc/anaconda3/bin/conda' 'shell.bash' 'hook' 2>/dev/null)"
  if [ $? -eq 0 ]; then
    eval "$__conda_setup"
  else
    if [ -f "/home/cacc/anaconda3/etc/profile.d/conda.sh" ]; then
      . "/home/cacc/anaconda3/etc/profile.d/conda.sh"
    else
      export PATH="/home/cacc/anaconda3/bin:$PATH"
    fi
  fi
  unset __conda_setup
  
  # 执行原命令
  conda "$@"
}
alias conda='lazy_load_conda'
# <<< conda initialize <<<

Node Version Manager(NVM)加载

# 延迟加载 NVM
export NVM_DIR="$HOME/.nvm"
lazy_load_nvm() {
  unalias nvm node npm yarn 2>/dev/null
  # 加载 nvm
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
  [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
  # 执行原命令
  "$@"
}
alias nvm='lazy_load_nvm nvm'
alias node='lazy_load_nvm node'
alias npm='lazy_load_nvm npm'
alias yarn='lazy_load_nvm yarn'

最后重新加载启动脚本:

source .zshrc

后面每次启动就只加载必要环境,启动时间大幅减小。

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

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

相关文章

【AI论文】推理语言模型的强化学习熵机制

摘要&#xff1a;本文旨在克服将强化学习扩展到使用 LLM 进行推理的主要障碍&#xff0c;即策略熵的崩溃。 这种现象在没有熵干预的RL运行中一直存在&#xff0c;其中策略熵在早期训练阶段急剧下降&#xff0c;这种探索能力的减弱总是伴随着策略性能的饱和。 在实践中&#xff…

Ubuntu22.04 安装 IsaacSim 4.2.0

1. 从官网下载 IsaacSim 4.2.0 安装包 https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone%404.2.0-rc.18%2Brelease.16044.3b2ed111.gl.linux-x86_64.release.zip 2. 查阅 Workstation Installation 安装方式 Workstation Installation — Isaac Sim Do…

Java代码重构:如何提升项目的可维护性和扩展性?

Java代码重构&#xff1a;如何提升项目的可维护性和扩展性&#xff1f; 在Java开发领域&#xff0c;随着项目规模的不断扩大和业务需求的频繁变更&#xff0c;代码的可维护性和扩展性逐渐成为了项目成功的关键因素。代码重构作为一种优化代码质量的重要手段&#xff0c;能够在…

《Python语言程序设计》2018 第4章第9题3重量和价钱的对比,利用第7章的概念来解答你

利用类来解答这个问题。 pack1, price1 50, 24.59 pack2, price2 25, 11.99class result:def __init__(self,pack,price):self.pack packself.price pricedef set_pack(self):return self.packdef set_price(self):return self.pricedef get_result(self):return self.pric…

在IIS上无法使用PUT等请求

错误来源&#xff1a; chat:1 Access to XMLHttpRequest at http://101.126.139.3:11000/api/receiver/message from origin http://101.126.139.3 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 其实我的后…

数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(上)

1. 数据金字塔的千年进化史 1.1 从地窖到云端的存储革命 某家电企业在2010年遭遇库存危机时&#xff0c;市场部门需要三天才能从纸质单据中统计出全国滞销型号。当他们的数据工程师在2023年轻声唤醒对话式分析机器人&#xff0c;同样的需求响应时间缩短至9秒。 数据分层架构的…

使用 DeepSeek API 搭建智能体《无间》- 卓伊凡的完整指南 -优雅草卓伊凡

使用 DeepSeek API 搭建智能体《无间》- 卓伊凡的完整指南 -优雅草卓伊凡 作者&#xff1a;卓伊凡 前言&#xff1a;为什么选择 DeepSeek API&#xff0c;而非私有化部署&#xff1f; 在开始搭建智能体之前&#xff0c;我想先说明 为什么推荐使用 DeepSeek API&#xff0c;而…

FPGA纯verilog实现MIPI-DSI视频编码输出,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 MIPI 编解码方案 3、设计思路框架工程设计原理框图FPGA内部彩条RGB数据位宽转换RGB数据缓存MIPI-DSI协议层编码MIPI-DPHY物理层串化MIPI-LVDS显示屏工程…

手写字魔法消除3:深度学习PmrNet神经网络实现图片修复(含训练代码、数据集和GUI交互界面)

第一步&#xff1a;PmrNet介绍 PmrNet是一种基于U-Net架构改进的深度学习网络&#xff0c;来自于论文《Practical Deep Raw Image Denoising on Mobile Devices》&#xff0c;这个网络聚焦于在移动设备上实现高效的原始图像&#xff08;RAW&#xff09;去噪&#xff08;本文用来…

opencv使用经典bug

opencv经典bug 1.bug介绍2.解决方案 1.bug介绍 D:\anaconda3\envs\yolo11s\python.exe F:\BYSJ\LX\yolov11-main\OCR_plateRecognition\plateRevise.py Traceback (most recent call last): File "F:\BYSJ\LX\yolov11-main\OCR_plateRecognition\plateRevise.py", l…

计算机基础——宏病毒防御与网络技术

文章目录 宏病毒详解与防范措施宏病毒简介宏病毒的特点宏病毒的传播途径宏病毒的防范措施宏病毒的检测与清除 自治计算机与自治系统解析什么是自治计算机&#xff1f;技术特点 自治系统&#xff08;Autonomous System, AS&#xff09;特点&#xff1a;自治系统类型 总结&#x…

Python uv包管理工具使用详解

一、UV 工具概述 ​UV​ 是由 Astral 团队&#xff08;Ruff 工具开发者&#xff09;用 Rust 编写的新一代 Python 包管理器&#xff0c;旨在替代传统工具链&#xff08;如 pip、virtualenv、poetry 等&#xff09;&#xff0c;提供以下核心优势 &#xff1a; ​极速性能​&a…

基于微信小程序的云校园信息服务平台设计与实现(源码+定制+开发)云端校园服务系统开发 面向师生的校园事务小程序设计与实现 融合微信生态的智慧校园管理系统开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

大语言模型的技术原理与应用前景:从Transformer到ChatGPT

目录 摘要 1. 引言 2. Transformer架构核心原理 2.1 自注意力机制 2.2 位置编码 2.3 前馈神经网络 3. 从GPT到ChatGPT的演进 3.1 GPT系列模型架构 3.2 训练流程优化 4. 应用场景与案例分析 4.1 代码生成 4.2 文本摘要 4.3 问答系统 5. 挑战与未来方向 5.1 当前技…

生成式人工智能:重构软件开发的范式革命与未来生态

引言 生成式人工智能&#xff08;GenAI&#xff09;正以颠覆性力量重塑软件开发的底层逻辑。从代码生成到业务逻辑设计&#xff0c;从数据分析到用户交互&#xff0c;GenAI通过其强大的推理能力与场景适应性&#xff0c;将传统开发流程的“复杂工程”转化为“敏捷实验”&#…

day1-小白学习JAVA---JDK安装和环境变量配置(mac版)

JDK安装和环境变量配置 我的电脑系统一、下载JDK1、oracle官网下载适合的JDK安装包&#xff0c;选择Mac OS对应的版本。 二、安装三、配置环境变量1、终端输入/usr/libexec/java_home -V查询所在的路径&#xff0c;复制备用2、输入ls -a3、检查文件目录中是否有.bash_profile文…

数据分析实战1(Excel制作报表)

Excel数据链接&#xff1a;【课程4.0】第2章_Excel.zip - 飞书云文档 1、拿到数据第一步 备份数据 ctrlshiftL&#xff1a;筛选 相关快捷键&#xff1a;&#xff08;alt&#xff1a;自动求和、ctrlshift5&#xff1a;转换为%&#xff09; 2、环比、同比 环比&#xff08;本…

本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt

项目视频讲解: 本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt_哔哩哔哩_bilibili 运行结果:

LabVIEW 中内存释放相关问题

在LabVIEW 编程领域&#xff0c;内存管理是一个关键且复杂的议题。我们常常关注 LabVIEW 如何将内存释放回操作系统&#xff08;OS&#xff09;&#xff0c;以及是否有方法确保在特定数据结构&#xff08;如队列、变体属性、动态数据引用 DVR 等&#xff09;销毁、删除或清空后…

基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案

在使用 OpenAI、Claude、Gemini 等大语言模型 API 构建对话系统时&#xff0c;开发者普遍面临成本不断上升的挑战。无论是基于检索增强生成&#xff08;RAG&#xff09;的应用还是独立的对话系统&#xff0c;这些系统都需要维护对话历史以确保上下文的连贯性&#xff0c;类似于…