Skip to content

无需 activate 运行虚拟环境内软件

约 386 字大约 1 分钟

Linuxmicromambaconda

2026-04-13

前情提要

  • 做毕设的时候,需要用到 LEfSe 这个软件包。由于年久失修(最后一次更新是在2021年8月),新版本 Python 里的某些函数和它已经不再兼容,所以我把它单独安装在一个 python=3.8 的虚拟环境里。
  • 但是在虚拟环境 ProjectM 内的 snakemake 使用绝对路径调用 lefse_run.py 的时候出现了问题。原因是在 lefse_run.py 命令内部还调用了 LEfSe 所在虚拟环境内的 R 。虽然可以通过临时改变环境变量等方法解决,但还是不太方便。那么,有没有一种更优雅的办法呢?

解决

使用 conda

  • 在翻阅 conda 官方手册的时候,我注意到 run 这个命令。官方给出的解释与示例如下:
    # Run an executable in a conda environment.
    
    usage: conda run [-h] [-n ENVIRONMENT | -p PATH] [-v] [--dev]
                     [--debug-wrapper-scripts] [--cwd CWD] [-s]
                     ...
    # Examples:
    conda create -y -n my-python-env python=3
    conda run -n my-python-env python --version
  • 个人觉得应该就是节省了 activate 对应虚拟环境这一步操作。这样对于编写脚本或流程时调用多个虚拟环境内的不同软件会更加友好~

使用 micromamba

  • conda 同理,只是换成了 micromamba
  • 注意⚠️,创建新环境的时候 conda 无需使用 env 子命令,而 micromamba 则需要。
    # Examples:
    micromamba env create -y -n my-python-env python=3
    micromamba run -n my-python-env python --version