Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >conda是旧爱,mamba为新欢

conda是旧爱,mamba为新欢

作者头像
生信技能树
发布于 2023-02-27 13:40:50
发布于 2023-02-27 13:40:50
4.8K01
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:1
代码可运行
前言

之前,习惯性用conda来管理环境,安装软件。大多时候都还不错,但是就是喜欢转圈圈,下载不动,最后给出些不清晰的信息~

最近服务器出问题,重新配置了一遍工作环境,换用mamba试试~

mamba

mamba 是使用C++ 对conda包管理器的重实现。

  • 使用多线程来并行下载仓库数据和包文件
  • 采用libsolv来更快的解决包依赖关联,这是Red Hat,Fedora和OpenSuse的RPM 包管理器中使用的先进的库
  • mamba核心部分使用C++来获取最大效率

最重要的是mamba有着和conda一样的命令, 没啥学习成本就可以迁移到mamba

The mamba-org 组织有多个Mamba 支持:

  • mamba 基于Pyhton命令行实现,替换conda, 提供高速,更可靠的环境管理
  • micromamba 纯C++实现,单个可执行文件
  • libmamba 一个C++库,为mambamicromamba提供低层级和高层级的API接口。

下载安装

这里我们下载安装micromamba。可以使用以下命令进行自动安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## Linux 默认shell 使用bash
curl micro.mamba.pm/install.sh | bash

## Linux 默认shell 使用zsh
curl micro.mamba.pm/install.sh | zsh

这里我根据我个人环境,进行手动安装演示

下载micromamba

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba
$ ls bin/micromamba
bin/micromamba

配置shell环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bin/micromamba shell init -s bash -p ~/micromamba

-p 可以设置自己想要的路径,创建的环境,配置文件等都在这个目录下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ micromamba

                                           __
          __  ______ ___  ____ _____ ___  / /_  ____ _
         / / / / __ `__ \/ __ `/ __ `__ \/ __ \/ __ `/
        / /_/ / / / / / / /_/ / / / / / / /_/ / /_/ /
       / .___/_/ /_/ /_/\__,_/_/ /_/ /_/_.___/\__,_/
      /_/

Version: 1.0.0

这个标志和mamba不一样,不过没关系,命令功能都一样。当前调用是通过命令micromamba, 名字稍长,我们可以在~/.bashrc里加上这句来通过mamba调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alias mamba=micromamba

配置

rc 文件表示run commands或者runtime configuration, 命令运行时的一些配置文件或命令。我们最常见就是.bashrc文件。

mamba可以读取.condarc文件和.mambarc文件配置。mamba可以读取多个rc文件,然后合并它们的内容,不过我们也不需要配置多个,配置一个就行。mamba读取rc文件有一个优先级:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// on_unix
{
"/etc/conda/.condarc",
"/etc/conda/condarc",
"/etc/conda/condarc.d/",
"/etc/conda/.mambarc",
"/var/lib/conda/.condarc",
"/var/lib/conda/condarc",
"/var/lib/conda/condarc.d/",
"/var/lib/conda/.mambarc"
}
{ root_prefix }/.condarc
{ root_prefix }/condarc
{ root_prefix }/condarc.d
{ root_prefix }/.mambarc
~/.conda/.condarc
~/.conda/condarc
~/.conda/condarc.d
~/.condarc
~/.mambarc
{ target_prefix }/.condarc
{ target_prefix }/condarc
{ target_prefix }/condarc.d
{ target_prefix }/.mambarc
$CONDARC,
$MAMBARC;

root_prefix 为之前设置的-p 参数值, 我们就在root_prefix 添加一个.mambarc文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ vim ~/micromamba/.mambarc
## 添加以下内容,并保存
channels:
  - defaults
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
custom_channels:
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
always_yes: true
auto_activate_base: false

上述配置中,将 conda-forge, bioconda, r这三个设为了默认channel, 所以以后安装这3个channel时,不用在命令行通过-c CHANNEL 来指定这三个channel了。同时always_yes设为true, 也不用每次加-y参数或者每次手动输入y确认安装包了。

新体验

mamba/micromamba使用和conda用法一样,不多介绍了。除了速度更快些,貌似软件兼容性也解决的更好。

安装包,某个依赖不存在时、而且不能自动安装时,最后会明确指出某个包没有,这样,我们就把那个依赖包安装了,再重新安装就好了~

安装时,进度条更加动感,能感觉它是在下载东西,而不像conda那再那一直转啊转。

还有,查看按照包时,它会将你的手动安装的包,用颜色字体来展示,这个小细节做得不错~

此外,mamba还有个新功能,用于查询软件依赖。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mamba repoquery depends -t salmon

                                           __
          __  ______ ___  ____ _____ ___  / /_  ____ _
         / / / / __ `__ \/ __ `/ __ `__ \/ __ \/ __ `/
        / /_/ / / / / / / /_/ / / / / / / /_/ / /_/ /
       / .___/_/ /_/ /_/\__,_/_/ /_/ /_/_.___/\__,_/
      /_/

Loaded current active prefix: "/home/huangsh/software/micromamba/envs/rna"

salmon[1.9.0]
  ├─ boost-cpp[1.74.0]
  │  ├─ bzip2[1.0.8]
  │  │  └─ libgcc-ng[12.2.0]
  │  │     ├─ _libgcc_mutex[0.1]
  │  │     └─ _openmp_mutex[4.5]
  │  │        ├─ _libgcc_mutex already visited
  │  │        └─ libgomp[12.2.0]
  │  │           └─ _libgcc_mutex already visited
  │  ├─ libgcc-ng already visited
  │  ├─ icu[69.1]
  │  │  ├─ libgcc-ng already visited
  │  │  └─ libstdcxx-ng[12.2.0]
  │  ├─ libstdcxx-ng already visited
  │  ├─ libzlib[1.2.13]
  │  │  └─ libgcc-ng already visited
  │  ├─ xz[5.2.6]
  │  │  └─ libgcc-ng already visited
  │  └─ zstd[1.5.2]
  │     ├─ libgcc-ng already visited
  │     ├─ libstdcxx-ng already visited
  │     └─ libzlib already visited
  ├─ bzip2 already visited
  ├─ libgcc-ng already visited
  ├─ icu already visited
  ├─ libstdcxx-ng already visited
  ├─ libzlib already visited
  ├─ libjemalloc[5.2.1]
  │  ├─ libgcc-ng already visited
  │  └─ libstdcxx-ng already visited
  └─ tbb[2021.6.0]
     ├─ libgcc-ng already visited
     └─ libstdcxx-ng already visited

更可以查询有哪些包依赖于这个包!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mamba repoquery whoneeds libgcc-ng

                                           __
          __  ______ ___  ____ _____ ___  / /_  ____ _
         / / / / __ `__ \/ __ `/ __ `__ \/ __ \/ __ `/
        / /_/ / / / / / / /_/ / / / / / / /_/ / /_/ /
       / .___/_/ /_/ /_/\__,_/_/ /_/ /_/_.___/\__,_/
      /_/

Loaded current active prefix: "/home/huangsh/software/micromamba/envs/rna"

 Name        Version  Build      Depends           Channel
──────────────────────────────────────────────────────────────────────────────
 boost-cpp   1.74.0   h6cacc03_7 libgcc-ng >=9.4.0 anaconda/cloud/conda-forge
 bzip2       1.0.8    h7f98852_4 libgcc-ng >=9.3.0 anaconda/cloud/conda-forge
 icu         69.1     h9c3ff4c_0 libgcc-ng >=9.4.0 anaconda/cloud/conda-forge
 libjemalloc 5.2.1    h9c3ff4c_6 libgcc-ng >=9.4.0 anaconda/cloud/conda-forge
 libzlib     1.2.13   h166bdaf_4 libgcc-ng >=12    anaconda/cloud/conda-forge
 salmon      1.9.0    h7e5ed60_1 libgcc-ng >=12    anaconda/cloud/bioconda
 tbb         2021.6.0 h924138e_1 libgcc-ng >=12    anaconda/cloud/conda-forge
 xz          5.2.6    h166bdaf_0 libgcc-ng >=12    anaconda/cloud/conda-forge
 zstd        1.5.2    h6239696_4 libgcc-ng >=12    anaconda/cloud/conda-forge

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Scalaz(22)- 泛函编程思维: Coerce Monadic Thinking
用户1150956
2018/01/05
5300
Scalaz(15)- Monad:依赖注入-Reader besides Cake
该文介绍了如何使用Cake Pattern和Monad Reader实现依赖注入,以及使用这些技术的优点和缺点。
用户1150956
2018/01/05
6920
Scalaz(54)- scalaz-stream: 函数式多线程编程模式-Free Streaming Programming Model
该文介绍了如何使用Free Monad和Scalaz-Stream实现一个功能类似于命令行交互的程序。通过Free Monad和Scalaz-Stream,可以编写异步代码,实现多线程和分布式计算,同时避免使用回调函数和事件循环。该示例使用了Scalaz的Task和Process,以及Apache Arrow的Array和Record,通过这些工具,可以高效地处理大量数据。
用户1150956
2018/01/05
6190
Scalaz(39)- Free :a real monadic program
本文介绍了什么是RESTful API,以及其在软件开发中的重要性。RESTful API是一种基于HTTP协议的网络应用程序接口,它遵循一定的约束和规范,使得开发人员能够更加容易和高效地构建和部署API。RESTful API具有可扩展性、可维护性和可重用性的特点,因此被广泛应用于各种软件开发场景中。
用户1150956
2018/01/05
1.3K0
Scalaz(14)- Monad:函数组合-Kleisli to Reader
  Monad Reader就是一种函数的组合。在scalaz里函数(function)本身就是Monad,自然也就是Functor和applicative。我们可以用Monadic方法进行函数组合:
用户1150956
2018/01/05
8190
Scalaz(3)- 基础篇:函数概括化-Generalizing Functions
  Scalaz是个通用的函数式编程组件库。它提供的类型、函数组件都必须具有高度的概括性才能同时支持不同数据类型的操作。可以说,scalaz提供了一整套所有编程人员都需要的具有高度概括性的通用函数,它
用户1150956
2018/01/05
6340
Scalaz(5)- typeclass:my typeclass scalaz style-demo
用户1150956
2018/01/05
5500
Scalaz(40)- Free :versioned up,再回顾
   在上一篇讨论里我在设计示范例子时遇到了一些麻烦。由于Free Monad可能是一种主流的FP编程规范,所以在进入实质编程之前必须把所有东西都搞清楚。前面遇到的问题主要与scalaz Free的F
用户1150956
2018/01/05
1.3K0
Scalaz(49)- scalaz-stream: 深入了解-Sink/Channel
   一个完整的scalaz-stream有以下几个部分组成:Source -> Transducer -> Sink,用直白文字来描述就是:“输入 -> 传换 -> 输出”。我们已经在前面几篇讨论中
用户1150956
2018/01/05
6040
Scalaz(32)- Free :lift - Monad生产线
    在前面的讨论里我们提到自由数据结构就是产生某种类型的最简化结构,比如:free monoid, free monad, free category等等。我们也证明了List[A]是个free
用户1150956
2018/01/05
5250
Scalaz(28)- ST Monad :FP方式适用变量
    函数式编程模式强调纯代码(pure code),主要实现方式是使用不可变数据结构,目的是函数组合(composability)最终实现函数组件的重复使用。但是,如果我们在一个函数p内部使用了可
用户1150956
2018/01/05
5990
Cats(3)- freeK-Free编程更轻松,Free programming with freeK
用户1150956
2018/01/05
7460
Scalaz(20)-Monad: Validation-Applicative版本的Either
  scalaz还提供了个type class叫Validation。乍看起来跟\/没什么分别。实际上这个Validation是在\/的基础上增加了Applicative功能,就是实现了ap函数。通过
用户1150956
2018/01/05
4920
Scalaz(38)- Free :Coproduct-Monadic语句组合
该文摘要总结:本文主要介绍了如何通过 FreeBSD 的 copro多态性来编写一个跨平台的应用程序。作者通过一个简单的示例,展示了如何使用 FreeBSD 的 copro多态性来编写一个跨平台的应用程序,并探讨了 FreeBSD 的 copro多态性的实现原理和优缺点。
用户1150956
2018/01/05
1.1K0
Scalaz(24)- 泛函数据结构: Tree-数据游览及维护
上节我们讨论了Zipper-串形不可变集合(immutable sequential collection)游标,在串形集合中左右游走及元素维护操作。这篇我们谈谈Tree。在电子商务应用中对于xm
用户1150956
2018/01/05
7570
Cats(2)- Free语法组合,Coproduct-ADT composition
该文总结了如何用Cats库实现交互式编程,通过使用Cats Effect和Free三大组件,实现基于事件驱动的交互式编程。同时,文章还介绍了如何通过Cats库实现交互式编程的DSL,并通过实例展示了如何使用Cats库实现交互式编程。
用户1150956
2018/01/05
1.5K0
Scalaz(17)- Monad:泛函状态类型-State Monad
  我们经常提到函数式编程就是F[T]。这个F可以被视为一种运算模式。我们是在F运算模式的壳子内对T进行计算。理论上来讲,函数式程序的运行状态也应该是在这个运算模式壳子内的,也是在F[]内更新的。那么
用户1150956
2018/01/05
1.9K0
Scalaz(12)- Monad:再述述flatMap,顺便了解MonadPlus
  在前面的几篇讨论里我们初步对FP有了些少了解:FP嘛,不就是F[A]吗?也是,FP就是在F[]壳子(context)内对程序的状态进行更改,也就是在F壳子(context)内施用一些函数。再直白一
用户1150956
2018/01/05
9990
Scalaz(10)- Monad:就是一种函数式编程模式-a design pattern
    Monad typeclass不是一种类型,而是一种程序设计模式(design pattern),是泛函编程中最重要的编程概念,因而很多行内人把FP又称为Monadic Programming
用户1150956
2018/01/05
8480
Scalaz(2)- 基础篇:随意多态-typeclass, ad-hoc polymorphism
本文介绍了Scala语言中的多态性,包括基于类型的多态性、基于对象的多态性、基于函数和类的多态性,以及如何使用这些多态性编写代码。同时,本文还介绍了一种简化多态性方法:类型类,以及如何使用类型类来实现多态性。
用户1150956
2018/01/05
8300
推荐阅读
相关推荐
Scalaz(22)- 泛函编程思维: Coerce Monadic Thinking
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验