4. Conda 基础命令:创建环境

好了,咱们正式进入实际操作环节。

上一章我们把 Conda 装好了,现在来学最核心的操作——创建环境。

我个人习惯,拿到一台新机器,第一件事不是装软件,而是先跑一遍 conda create 测试环境。为什么?因为 Conda 的环境隔离机制,说白了就是给每个项目一个独立的小房间。你可以在里面随意折腾,不会影响到外面。我见过太多人在基础环境里装了几百个包,最后依赖冲突,删都不敢删。

4.1 conda create:最核心的命令

创建一个环境非常简单。命令行里敲这个:

conda create -n maxquant_env python=3.9

解释一下各个部分的含义。

参数 含义 说明
conda create 创建环境的命令 固定写法,告诉 Conda 你要新建一个环境
-n maxquant_env 指定环境名称 maxquant_env 是我取的名字,你可以改成任意名称
python=3.9 指定 Python 版本 这里用 3.9,MaxQuant 官方推荐版本

这里有个小坑。我记得第一次用 Conda 时,我以为 -n 和 --name 可以混用,其实都可以,但我习惯用 -n,少打字。

我的建议:环境名字最好有意义。比如这个教程里,我全都用 maxquant_env。别取什么 test1、abc,两个月后你自己都认不出来。

4.2 环境创建流程详解

执行上面那条命令后,终端会有一连串输出。我再跑一次给你看关键步骤。

$ conda create -n maxquant_env python=3.9

Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/you/miniconda3/envs/maxquant_env

  added / updated specs:
    - python=3.9

The following NEW packages will be INSTALLED:

  _libgcc_mutex      pkgs/main/linux-64::_libgcc_mutex-0.1-main
  ca-certificates    pkgs/main/linux-64::ca-certificates-2024.3.11-h06a4308_0
  certifi            pkgs/main/linux-64::certifi-2024.2.2-py39h06a4308_0
  ld_impl_linux-64   pkgs/main/linux-64::ld_impl_linux-64-2.38-h1181459_1
  libffi             pkgs/main/linux-64::libffi-3.4.4-h6a678d5_0
  libgcc-ng          pkgs/main/linux-64::libgcc-ng-11.2.0-h1234567_1
  libstdcxx-ng       pkgs/main/linux-64::libstdcxx-ng-11.2.0-h1234567_1
  ncurses            pkgs/main/linux-64::ncurses-6.4-h6a678d5_0
  openssl            pkgs/main/linux-64::openssl-3.0.13-h7f8727e_0
  pip                pkgs/main/linux-64::pip-23.3.1-py39h06a4308_0
  python             pkgs/main/linux-64::python-3.9.18-h955ad1f_0
  readline           pkgs/main/linux-64::readline-8.2-h5eee18b_0
  setuptools         pkgs/main/linux-64::setuptools-68.2.2-py39h06a4308_0
  sqlite             pkgs/main/linux-64::sqlite-3.41.2-h5eee18b_0
  tk                 pkgs/main/linux-64::tk-8.6.12-h1ccaba5_0
  tzdata             pkgs/main/linux-64::tzdata-2024a-h04d1e81_0
  wheel              pkgs/main/linux-64::wheel-0.41.2-py39h06a4308_0
  xz                 pkgs/main/linux-64::xz-5.4.5-h5eee18b_0
  zlib               pkgs/main/linux-64::zlib-1.2.13-h5eee18b_0

Proceed ([y]/n)? y

终端最后会问你是否继续,输入 y 回车。

嗯,这里要注意:Conda 会先解析依赖关系。你在日志里看到的 Solving environment: done 就表示依赖都检查通过了。我遇到过一次卡在 Solving environment 很久的情况,那是因为网络源的问题,后面会教你换源解决。

4.3 指定 Python 版本的重要性

你可能要问:为什么非指定 python=3.9?

MaxQuant 在 Conda 环境里安装时,对 Python 版本很敏感。3.8、3.9、3.10 是官方测试过的。我建议用 3.9,兼容性最好。不信你可以试试 3.11,大概率装到一半就报错。

如果你想看当前环境支持哪些 Python 版本,可以查:

conda search python

结果会列出所有可用的 Python 版本号。在这个教程里,记住用 3.9 就够了。

4.4 创建环境实战:从零开始

我们来完整走一遍流程。打开终端,逐条执行。

# 第一步:创建环境并指定 Python 版本
conda create -n maxquant_env python=3.9

# 看到 Proceed ([y]/n)? 时输入 y

# 第二步:激活环境
conda activate maxquant_env

# 第三步:验证环境是否激活
conda info --envs

# 或者用 which python 看看路径
which python

当你执行 conda info --envs,会看到类似下面的输出:

# conda environments:
#
base                  *  /home/you/miniconda3
maxquant_env             /home/you/miniconda3/envs/maxquant_env

注意看星号 * 在哪一行,它表示当前激活的环境。如果星号在 maxquant_env 这一行,说明环境切换成功了。我记得第一次用 Conda 时,总是忘了 conda activate,结果包都装到了 base 里,环境隔离白做了。所以每次操作前,看一眼星号位置,这是好习惯。

避坑指南:如果你终端前面没有显示 (maxquant_env) 前缀,说明环境没激活。这时候装包,都是装到 base 里。我曾经因为这个,把 base 搞得一团糟,最后只能重新装 Miniconda。

4.5 创建环境时的其他常用参数

conda create 不只是能装 Python。你可以在创建时一口气装好几个包。比方说:

conda create -n my_project python=3.9 numpy pandas matplotlib

这样创建环境的同时,就把 numpy、pandas、matplotlib 一起装了。不用先创建再一步步装。我经常用这个方式,一步到位,节省时间。

另一个有用的参数是 -c 指定频道。

conda create -n maxquant_env python=3.9 -c conda-forge

-c conda-forge 表示从社区维护的 conda-forge 频道获取包。这个频道包更全,更新也更及时。我一般创建环境时都加上 -c conda-forge,稳妥。MaxQuant 相关的包在 conda-forge 上也有。

4.6 用 environment.yml 文件创建环境

在团队协作里,你不会每次手动敲一堆包名。更常用的方式是写一个 environment.yml 文件。

举个例子,这是本教程配套的配置文件:

name: maxquant_env
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.9
  - pip
  - numpy
  - pandas
  - matplotlib
  - pip:
    - maxquant==2.6.0.0

有了这个文件,创建环境只需要一行命令:

conda env create -f environment.yml

优势很明显:配置可重复、可版本控制、可分享。我在做生物信息学项目时,每个分析项目都会带一个 environment.yml,放在 Git 仓库里。换机器或者给同事,直接跑一行命令环境就搭好了。

小技巧:如果你需要导出当前环境的配置,用这个命令:conda env export > environment.yml。这样别人就能复刻你的环境,包括所有包的版本号。

4.7 环境命名规范与最佳实践

最后聊聊环境命名。我见过太多人随意命名:env1、test、new_env……结果一个月后,自己都搞不清哪个环境是干什么的。

我的推荐是:

情景 推荐命名 示例
课程/教程专用 语义化命名 maxquant_env
项目专用 项目名 + 用途 proteomics_analysis
测试用环境 标明测试 maxquant_test
不同软件版本 附带版本号 maxquant_v2_6

另外,环境名不要用空格,不要用大写字母,尽量用下划线连接。这是 Linux 习惯,也是跨平台兼容的小细节。

4.8 结语前的一个小实验

你创建一个干净环境后,试试在里面装一个跟 MaxQuant 完全无关的包,比如 librosa(音频处理库)。装了之后,看看 base 环境有没有变化。

conda activate maxquant_env
conda install -c conda-forge librosa
conda deactivate
conda list | grep librosa

如果 base 里没有 librosa,而 maxquant_env 里有,那就说明环境隔离生效了。这就是 Conda 的价值——各玩各的,互不干扰。

核心记住:Conda 创建环境,最核心的就三件事——conda create -n 环境名 python=版本、conda activate 环境名、以及用 environment.yml 实现可复现。把这三点记牢了,后面的操作就畅通无阻。

4.9 环境管理入门命令速查

把下面这些命令记住,后续章节会频繁用到。

# 创建环境
conda create -n 环境名 python=版本

# 激活环境
conda activate 环境名

# 退出环境
conda deactivate

# 列出所有环境
conda info --envs
# 或
conda env list

# 删除环境(谨慎使用)
conda remove -n 环境名 --all

# 从 yml 文件创建环境
conda env create -f environment.yml
警告:删除环境时,--all 参数不可省略,否则只会删除包,不会删除环境本身。我亲眼见过有人忘记加 --all,结果环境还留在列表里,再次创建同名环境时提示已存在,折腾了半天。

好了,Conda 环境创建这块,基本的命令和最佳实践都讲透了。接下来你就可以大胆创建各种环境,不用担心把系统搞乱了。我在后面的章节里,会基于 maxquant_env 这个环境,继续安装和配置 MaxQuant。