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 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。