虚拟环境之conda
2026-02-14
运维
00
请注意,本文编写于 49 天前,最后修改于 5 天前,其中某些信息可能已经过时。

目录

一、为什么选择 Miniconda?
1.1 Python 环境管理的困境
1.2 Conda 的核心优势
1.3 Miniconda vs Anaconda
二、Miniconda 安装与配置
2.1 标准安装流程(Linux)
2.2 多用户共享配置(企业场景)
2.3 国内镜像加速(必做)
2.4 完全卸载(干净移除)
三、环境管理:从入门到精通
3.1 环境生命周期管理
3.2 环境克隆与迁移
3.3 环境版本控制(时间机器)
3.4 高级:指定路径的环境
四、包管理:Conda 与 Pip 的协作
4.1 Conda 包查询与安装
4.2 Conda + Pip 混合使用(最佳实践)
4.3 环境健康检查
五、生产环境高级技巧
5.1 Docker 中的 Miniconda
5.2 CI/CD 中的 Conda
5.3 禁用干扰提示
六、故障排查速查表
七、完整命令速查表

一、为什么选择 Miniconda?

1.1 Python 环境管理的困境

Python 开发者的经典噩梦:

展开代码
# 场景 1:系统 Python 被污染 sudo pip install tensorflow # 破坏系统包,yum/apt 报错 pip install numpy==1.19 # 项目 A 需要 1.19 pip install numpy==1.24 # 项目 B 需要 1.24,A 崩溃 # 场景 2:虚拟环境工具混乱 python -m venv myenv # venv,标准库自带,功能简陋 virtualenv myenv # virtualenv,第三方,历史包袱 pipenv install # Pipenv,Lock 文件慢,争议大 poetry install # Poetry,新兴,生态不成熟

1.2 Conda 的核心优势

特性pip + venvConda说明
包管理仅 Python 包Python + C/C++/R/Node解决 NumPy/Pandas 等科学计算的复杂依赖
环境隔离独立 Python 解释器和库
二进制分发编译安装慢预编译包(.tar.bz2)安装 PyTorch/TensorFlow 从小时降到分钟
多版本 Python需手动编译conda install python=3.9一键切换
跨平台有限Windows/macOS/Linux 统一环境导出文件跨平台可用
环境导出requirements.txtenvironment.ymlYAML 包含通道、pip 依赖,更完整

关键认知:Conda 不仅是 Python 包管理器,更是跨语言、跨平台的通用包管理器和环境管理器

1.3 Miniconda vs Anaconda

对比项MinicondaAnaconda
体积~400 MB~3 GB
预装包仅 Conda + Python2500+ 科学计算包
适用场景生产环境、CI/CD、服务器初学者、数据科学入门
推荐度⭐⭐⭐⭐⭐⭐⭐⭐

结论:生产环境、服务器部署、Docker 镜像必选 Miniconda,避免 Anaconda 的臃肿和许可风险。


二、Miniconda 安装与配置

2.1 标准安装流程(Linux)

展开代码
# 1. 下载最新版(国内镜像加速) wget https://mirrors.cernet.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh # 或清华镜像 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh # 2. 校验完整性(可选但推荐) sha256sum Miniconda3-latest-Linux-x86_64.sh # 对比官网公布的哈希值 # 3. 静默安装(-b = batch,-p = prefix) sudo bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 # 4. 全局配置(所有用户可用) echo 'export PATH=/opt/miniconda3/bin:$PATH' | sudo tee /etc/profile.d/miniconda.sh source /etc/profile.d/miniconda.sh # 5. 初始化 Shell(生成 conda 函数) sudo /opt/miniconda3/bin/conda init --all # bash, zsh, fish 全部初始化 # 6. 验证 conda --version conda info

2.2 多用户共享配置(企业场景)

展开代码
# 创建 conda 用户组 sudo groupadd conda sudo chgrp -R conda /opt/miniconda3 sudo chmod 775 /opt/miniconda3 sudo chmod g+s /opt/miniconda3 # 新建文件继承组 # 用户加入组 sudo usermod -aG conda $USER # 重新登录生效 # 共享包缓存(节省磁盘) sudo mkdir -p /opt/conda-pkgs sudo /opt/miniconda3/bin/conda config --system --add pkgs_dirs /opt/conda-pkgs

2.3 国内镜像加速(必做)

展开代码
# 生成或编辑配置文件 cat > ~/.condarc <<'EOF' channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud nvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud EOF # 清除索引缓存 conda clean -i # 验证 conda config --show channels

2.4 完全卸载(干净移除)

展开代码
# 步骤 1:反向初始化(移除 shell 配置) conda activate base conda init --reverse --all # 步骤 2:删除安装目录 sudo rm -rf /opt/miniconda3 # 系统级安装 rm -rf ~/miniconda3 # 用户级安装 # 步骤 3:删除用户配置 rm -rf ~/.condarc ~/.conda ~/.continuum ~/.anaconda rm -rf ~/.miniconda3 # 可能存在的残留 # 步骤 4:清理 shell 配置(如果 init --reverse 未完全清除) sed -i '/conda initialize/d' ~/.bashrc ~/.zshrc

三、环境管理:从入门到精通

3.1 环境生命周期管理

展开代码
# ========== 创建环境 ========== # 基础环境(指定 Python 版本) conda create -n myproject python=3.10 # 指定多个包(版本约束) conda create -n datasci python=3.9 numpy=1.24 pandas=1.5 scikit-learn=1.3 # 从 requirements.txt 迁移(混合使用) conda create -n mixed python=3.10 conda activate mixed pip install -r requirements.txt # 纯 pip 包继续用 pip # 禁用默认包(.condarc 中配置了默认安装包时) conda create -n minimal python=3.11 --no-default-packages # ========== 查看环境 ========== conda env list # 或 conda info --envs # 输出: # base * /opt/miniconda3 # * 表示当前激活 # myproject /opt/miniconda3/envs/myproject # datasci /home/user/.conda/envs/datasci # 查看环境详情 conda info -n myproject # ========== 激活/停用 ========== conda activate myproject # 激活 conda deactivate # 停用(回到 base 或系统) # ========== 删除环境 ========== conda remove -n myproject --all # 彻底删除 # 或 conda env remove -n myproject

3.2 环境克隆与迁移

展开代码
# 克隆环境(同机器备份) conda create --name myproject-backup --clone myproject # 导出环境文件(跨机器迁移) conda activate myproject conda env export > environment.yml # 查看 environment.yml 内容 cat environment.yml # name: myproject # channels: # - conda-forge # - defaults # dependencies: # - python=3.10.12 # - numpy=1.24.3 # - pip: # - some-pip-only-package==1.0.0 # 从文件创建环境(另一台机器) conda env create -f environment.yml # 指定新名字创建 conda env create -f environment.yml -n myproject-new

3.3 环境版本控制(时间机器)

展开代码
# 查看环境变更历史 conda list --revisions # 输出: # 2023-10-15 09:23:23 (rev 0) # +numpy-1.24.3 # +python-3.10.12 # # 2023-10-20 14:15:08 (rev 1) # +pandas-2.0.3 # -numpy-1.24.3 # +numpy-1.25.0 # 回滚到指定版本 conda install --revision=0 # 回到最初状态 # 撤销最后一次操作 conda install --revision=-2 # 倒数第二个版本

3.4 高级:指定路径的环境

展开代码
# 创建到指定路径(非标准 envs 目录) conda create --prefix /data/conda-envs/bigdata python=3.10 # 激活(必须全路径) conda activate /data/conda-envs/bigdata # 查看 conda env list # /data/conda-envs/bigdata * /data/conda-envs/bigdata # 重命名(实际是克隆+删除) conda create --name bigdata-renamed --clone /data/conda-envs/bigdata conda remove --prefix /data/conda-envs/bigdata --all

四、包管理:Conda 与 Pip 的协作

4.1 Conda 包查询与安装

展开代码
# 搜索包 conda search numpy conda search numpy=1.24 # 指定版本 # 安装包 conda install numpy conda install numpy=1.24.3 # 精确版本 conda install "numpy>=1.24,<1.25" # 范围 # 指定通道(channel) conda install pytorch torchvision torchaudio -c pytorch -c nvidia # 更新包 conda update numpy conda update --all # 更新所有 # 删除包 conda remove numpy

4.2 Conda + Pip 混合使用(最佳实践)

展开代码
# 步骤 1:优先用 Conda 安装底层依赖 conda create -n ml python=3.10 conda activate ml conda install numpy scipy pandas scikit-learn # 步骤 2:Conda 没有的包,再用 pip pip install transformers datasets accelerate # 步骤 3:锁定完整环境(生产必备) conda env export --from-history > environment.yml # 仅手动安装的包 pip list --format=freeze > requirements.txt # pip 包清单 # 或使用 conda-lock(更严谨) conda install conda-lock conda-lock -f environment.yml -p linux-64

关键原则

场景工具原因
NumPy/SciPy/Pandas/MatplotlibCondaMKL 优化,预编译二进制
PyTorch/TensorFlow/JAXCondaCUDA 版本自动匹配
纯 Python 包(Django/Flask/FastAPI)pipConda 通道可能滞后
最新开发版pippip install git+https://...

4.3 环境健康检查

展开代码
# 诊断环境完整性 conda doctor # 输出示例: # ✔ Environment is listed in environments.txt # ✔ Environment has a valid prefix # ✔ No broken packages found # ✖ Missing files: 2 packages have missing files # - numpy: 1 file missing (lib/libmkl_rt.so) # - pytorch: 3 files missing # 修复:重新安装问题包 conda install --force-reinstall numpy pytorch

五、生产环境高级技巧

5.1 Docker 中的 Miniconda

展开代码
# Dockerfile FROM continuumio/miniconda3:latest # 复制环境文件 COPY environment.yml /tmp/ # 创建环境(使用 conda-pack 或直接从文件) RUN conda env create -f /tmp/environment.yml && \ conda clean -afy # 激活环境(Docker 中需用 shell 包装) SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"] # 或 ENTRYPOINT 激活 ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myenv", "python"] CMD ["app.py"]

更优方案:使用 conda-pack(预打包环境)

展开代码
# 在开发机打包 conda install conda-pack conda pack -n myenv -o myenv.tar.gz # Dockerfile 中解压即用 FROM debian:bullseye-slim COPY myenv.tar.gz /tmp/ RUN mkdir -p /opt/myenv && tar -xzf /tmp/myenv.tar.gz -C /opt/myenv ENV PATH=/opt/myenv/bin:$PATH

5.2 CI/CD 中的 Conda

展开代码
# .github/workflows/python-app.yml name: Python CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v3 - name: Setup Miniconda uses: conda-incubator/setup-miniconda@v2 with: auto-update-conda: true python-version: ${{ matrix.python-version }} environment-file: environment.yml activate-environment: test-env - name: Run tests shell: bash -l {0} run: | conda activate test-env pytest tests/

5.3 禁用干扰提示

展开代码
# 禁用 conda 更新提示(每次激活都提示很烦) conda config --set notify_outdated_conda false # 禁用默认激活 base 环境 conda config --set auto_activate_base false # 在 .condarc 中完整配置 cat > ~/.condarc <<'EOF' channels: - defaults show_channel_urls: true notify_outdated_conda: false auto_activate_base: false create_default_packages: [] EOF

六、故障排查速查表

现象诊断解决
conda: command not foundecho $PATH添加 /opt/miniconda3/bin 到 PATH
Solving environment: failedconda clean --all清除缓存,或换国内镜像
PackagesNotFoundErrorconda search pkg换 channel 或改用 pip
Permission deniedls -la /opt/miniconda3sudo chown -R $USER:$USER 或加用户到 conda 组
环境激活后 pip 指向系统which pippython -m pip 或重装 pip
包冲突无法解决conda list --revisions回滚或创建干净环境
环境损坏conda doctorconda install --force-reinstall 或重建

七、完整命令速查表

展开代码
# ========== 安装与配置 ========== wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 conda init --all conda config --set auto_activate_base false # ========== 环境管理 ========== conda create -n myenv python=3.10 conda activate myenv conda deactivate conda env list conda remove -n myenv --all conda create --name clone --clone myenv # ========== 包管理 ========== conda install numpy=1.24 conda update --all conda remove numpy conda list conda search pkg # ========== 导入导出 ========== conda env export > environment.yml conda env create -f environment.yml conda list --revisions conda install --revision=0 # ========== 维护 ========== conda clean -i # 清除索引缓存 conda clean -p # 清除未使用包 conda clean -a # 清除所有 conda doctor # 健康检查

本文作者:zzz

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!