本文根据
ref/anacoda-introduce.md整理,介绍 Anaconda、Miniconda、Miniforge、Channels、包管理、环境复现、Shell 初始化、镜像和 IDE 集成。
Anaconda 和 Conda 经常一起出现,但它们并不是同一个概念:
- Anaconda Distribution 是面向科学计算和数据分析的 Python 发行版,预装 Conda、Python、Anaconda Navigator 以及大量常用包。
- Conda 是一个跨平台的软件包和 Python 环境管理工具。它不仅能管理 Python 包,也能管理 Python、编译工具、CUDA Runtime 等非 Python 软件。
- Miniconda 和 Miniforge 是更精简的发行版;前者由 Anaconda 维护并默认使用
defaults,后者由 conda-forge 社区维护并默认使用conda-forge。
提示:Conda 的命令、配置项和求解器会随版本变化。本文以 2026-09-25 的 Conda 官方 latest 文档为核对基线;截至该日期,正式发布的 Conda 最新版本为 26.7.x,文档中提前描述的 26.9+ 功能仍应视为前瞻信息。命令未在所有操作系统和发行版上逐一执行。实际使用前请检查本机版本:
conda --version conda info conda <command> --help对长期维护的文档,应以本机帮助输出和官方文档为准。
版本敏感功能速查
| 功能 | 最低版本或说明 |
|---|---|
auto_activate、conda init --condabin |
Conda 25.5+;旧键 auto_activate_base 已于 26.3 移除 |
增强版 conda export |
Conda 25.7+ |
conda create --file environment.yml,以及用 --name/--prefix 覆盖 YAML 中的 name |
Conda 26.3+;旧版本使用 conda env create -f |
custom_multichannels.defaults、conda doctor --fix、conda run -s |
Conda 26.1+ |
| 原生多平台锁文件 | Conda 26.5+ |
conda-pypi |
官方文档标记为 Conda 26.9+ 的前瞻功能,基线时点尚未正式发布;并要求 Rattler solver |
快速开始
下面是一条适合开发项目的最短路径;下载和安装发行版后即可开始:
# 创建独立环境
conda create -n myapp python=3.12
conda activate myapp
# 安装项目依赖
conda install numpy
# 导出一个便于维护的 Conda 规格
conda env export --from-history > environment.from-history.yml
--from-history 不会导出普通 pip 依赖,也不会覆盖原有 pip: 区域。它通常仍会写入本机 prefix:;检查并删除该行后,再与项目的 requirements.txt 或现有 environment.yml 合并。使用 26.3+ 的 conda create --file 时,如果文件保留了 prefix: 而命令行没有 -n 或 -p,该路径可能被当作目标环境路径。
1. 选择发行版
1.1 Anaconda、Miniconda 和 Miniforge
| 发行版 | 默认 Channel | 特点 | 适合场景 |
|---|---|---|---|
| Anaconda Distribution | defaults |
预装大量科学计算包,并提供 Navigator 图形界面 | 教学、学习和快速体验数据科学工具 |
| Miniconda | defaults |
只预装 Python、Conda 及必要依赖 | 熟悉命令行、需要官方默认仓库的通用环境 |
| Miniforge | conda-forge |
精简,并提供 Conda 和 Mamba;默认不使用 defaults |
开源项目、服务器、CI 和希望明确使用 conda-forge 的环境 |
下载入口:
Anaconda 官方仓库(defaults)受 Anaconda 服务条款约束。商业或组织使用前应先确认适用条款;安装 Miniconda 并不代表使用 defaults 时可以忽略这些条款。Miniforge 默认不访问 defaults,除非用户主动添加。
Mambaforge 已于 2024 年弃用,并于 2025 年停止发布;新安装应选择 Miniforge。
1.2 不要把发行版和 Channel 混为一谈
- 安装 Miniconda 后,可以改用
conda-forge。 - 安装 Miniforge 后,也可以按需添加其他 Channel。
- 发行版决定初始安装内容和默认配置,Channel 决定后续软件包从哪里获取。
- Channel 混用可能产生 ABI 不兼容,不能仅靠“安装体积更小”判断哪个发行版更安全或更稳定。
1.3 安装路径和平台
- Windows 安装路径尽量避免空格、中文和特殊字符。
- Apple Silicon 优先使用原生
osx-arm64构建;在 Rosetta 终端中运行时可使用osx-64,但不要无意混用两种架构。 - 常见 Linux 架构分别对应
linux-64和linux-aarch64。 - 使用
conda info查看当前平台、架构和环境目录。
可以在创建时显式指定目标平台:
conda create --platform osx-arm64 --name native-arm python=3.11
跨操作系统创建环境可能缺少虚拟包信息或发生文件布局不兼容;除 --dry-run、导出锁文件等场景外,不建议为了“跨平台”强行创建与当前主机不一致的环境。
2. Conda Channels
Channel(频道)是存放 Conda 软件包的位置。Conda 安装、更新或搜索软件包时,会按照配置的 Channel 列表进行查询。
常见公共 Channel 包括:
| Channel | 说明 |
|---|---|
defaults |
内置的多 Channel 集合,通常包含 Anaconda 官方维护的 main、r,以及 Windows 上的 msys2 |
conda-forge |
社区维护的 Channel,包含大量 Python、R、GPU 和科学计算相关构建 |
bioconda |
面向生物信息学软件包的社区 Channel,通常与 conda-forge 配合使用 |
pytorch |
PyTorch 官方维护的 Conda Channel,具体可用版本应查询 PyTorch 官方文档 |
原始笔记中的 community 不是一个固定的 Channel 名称;通常指 conda-forge、bioconda 这类社区维护渠道。
2.1 查看当前 Channel
conda config --show channels
conda config --show channel_priority
conda config --show-sources
--show-sources 会显示配置的来源及优先级,排查“本机配置为什么与文档不同”时非常有用。
2.2 选择一个默认 Channel
Conda 官方当前建议将 defaults 和 conda-forge 二选一作为默认来源,而不是长期放在同一个列表中混用。
只使用 conda-forge:
channels:
- conda-forge
- nodefaults
只使用 Anaconda 官方仓库:
channels:
- defaults
如果确实必须混用 Channel,可以启用严格优先级:
channel_priority: strict
strict 的含义是:某个包如果出现在高优先级 Channel 中,就不会再从低优先级 Channel 选择同名包。它可以降低混用风险,但也可能使原本可解的环境变成无解。
Conda 的默认 channel_priority 是 flexible;disabled 会忽略 Channel 优先级并优先选择版本,通常不建议在可复现环境中使用。
2.3 添加、调整和删除 Channel
# 添加到 Channel 列表开头
conda config --add channels conda-forge
# 等价写法
conda config --prepend channels conda-forge
# 添加到 Channel 列表末尾
conda config --append channels some-channel
# 删除一个 Channel 值
conda config --remove channels conda-forge
如果只是临时从某个 Channel 安装,可以不修改全局配置:
conda install -c conda-forge websocket-client
如果希望该包及其依赖都只从指定 Channel 解析:
conda install -c conda-forge --override-channels websocket-client
也可以只指定某个包的来源,但依赖仍会从已配置的其他 Channel 解析:
conda install conda-forge::websocket-client
后一种方式在 Channel 不兼容时仍可能产生混用问题,应谨慎使用。
2.4 环境级配置
先激活目标环境,再使用 --env 将配置写入该环境的 $CONDA_PREFIX/.condarc:
conda activate demo
conda config --env --prepend channels conda-forge
conda config --env --set channel_priority strict
conda config --show-sources
环境级配置只对当前机器上的这个环境生效,不能替代需要提交和共享的 environment.yml。如果没有激活环境就使用 conda config --env,Conda 可能退回写入用户级配置。
3. 软件包管理
3.1 查看 Conda、当前环境和软件包
conda --version
conda info
conda list
conda env list
查看未激活环境中的软件包:
conda list -n demo
查看依赖信息:
conda search numpy --info
3.2 搜索软件包
conda search numpy
conda search -c conda-forge websocket-client
只搜索指定 Channel 和当前平台:
conda search -c conda-forge --override-channels websocket-client
软件包名称、版本、构建、Python 版本和可用平台都会随 Channel 与时间变化。长期文档不应依赖一个已经过时的固定版本示例。
3.3 安装软件包
conda install numpy
conda install "numpy>=1.26"
conda install scipy pandas
conda install grpcio-tools tensorboard websocket-client
指定 Channel:
conda install -c conda-forge websocket-client
安装一组已知存在兼容性关系的软件包时,尽量在同一次事务中安装,让求解器看到完整约束:
conda install python=3.11 numpy scipy
PyTorch、TensorFlow 等框架对 Python、CUDA 和构建版本有严格组合要求,应优先使用项目官方安装器生成的命令,不要从多个不兼容的 Channel 随意拼接依赖。
3.4 更新
# 更新当前环境中的指定包
conda update numpy
# 更新 base 中的 Conda
conda update -n base conda
# 预览环境整体更新计划
conda update --all --dry-run
# 执行环境整体更新
conda update --all
conda update --all 只会在现有 Channel 和版本约束允许的范围内更新。执行前建议导出环境规格或显式规格,重要环境应准备重建方案。
3.5 使用修订历史回滚
Conda 会记录由 Conda 事务造成的环境修订:
conda list -n demo --revisions
conda install -n demo --revision 2
修订历史不能完整撤销普通 pip、文件修改或环境外操作;重要环境仍应保留声明式规格或锁文件。
4. 创建和管理环境
建议为不同项目创建独立环境,并尽量不要把项目依赖安装到 base 中。
base 主要用于运行 Conda 自身、创建和维护环境,以及安装少量环境管理工具。项目依赖应属于各自的项目环境:
base
├── project-a-env
└── project-b-env
这样可以避免不同项目互相升级、卸载或覆盖同一包。
# 创建指定 Python 版本的环境
conda create --name demo python=3.11
# 激活和退出
conda activate demo
conda deactivate
# 查看环境及路径
conda env list
# 删除环境
conda env remove --name demo
# 重命名环境
conda rename --name demo demo-old
4.1 使用 --prefix 创建项目本地环境
使用 --prefix 可以把环境放在项目目录中:
conda create --prefix ./.conda-env python=3.11
conda activate ./.conda-env
也可以让 --prefix 覆盖环境文件中的 name(Conda 26.3+):
conda create --prefix ./.conda-env --file environment.yml
注意:
- 路径环境在列表中通常显示为完整路径,不能再用
--name直接引用。 - 解释器位于
./.conda-env/bin/python(macOS/Linux)或./.conda-env/python.exe(Windows)。 - 必须把整个环境目录加入
.gitignore,不要提交到版本库。 - 项目迁移时应重新创建环境,而不是直接复制包含绝对路径的环境目录。
4.2 创建、克隆和运行
也可以在创建时一次安装多个包:
conda create --name demo python=3.11 numpy scipy
克隆一个 Conda 环境:
conda create --name demo-copy --clone demo
克隆适合快速复制本机环境,但不应替代项目规格或锁文件;尤其是需要迁移到其他机器、操作系统或架构时,应使用导出文件。
conda rename 主要更新 Conda 自身记录的环境名称,不会自动更新所有外部引用,例如已注册的 Jupyter Kernel、定时任务或硬编码解释器路径。重要环境优先使用“导出规格后重建”。
不激活环境,直接运行其中的一条命令:
conda run -n demo python script.py
5. environment.yml 的完整生命周期
5.1 创建 environment.yml
建议每个项目只选择一个主要 Channel,并显式记录 pip 依赖:
name: demo
channels:
- conda-forge
- nodefaults
dependencies:
- python=3.11
- numpy
- pip
- pip:
- requests
根据文件创建环境:
conda create --file environment.yml
conda activate demo
Conda 26.3 及之后支持并推荐使用
conda create --file environment.yml。更早的 Conda 应使用:conda env create -f environment.yml当前版本仍保留
conda env create以兼容已有脚本。命令行传入--name或--prefix时,它们会覆盖文件中的name。
更新已有环境,并在不再需要某些依赖时移除它们:
conda env update -f environment.yml --prune
--prune 主要处理 Conda 管理的依赖,不会因为从 pip: 列表中删除一项就自动卸载对应的 pip 包。删除 pip 依赖后,应单独执行卸载命令,或从声明式文件重新创建环境。
5.2 导出可维护的环境规格
如果希望文件中只保留显式请求的 Conda 包,而不是全部传递依赖:
conda env export --from-history > environment.from-history.yml
--from-history 读取 Conda 的事务历史,不会导出普通 python -m pip 安装的包,也不会保留原文件中的 pip: 区域。这种方式更适合跨平台共享,但不会保证与原环境逐包完全一致。它和完整导出都可能包含本机 prefix:,应先删除该行,再与原 environment.yml 或 requirements.txt 合并,避免直接覆盖并丢失 pip 依赖。
导出当前环境解析后的完整状态,包括普通 pip 包:
conda env export > environment.resolved.yml
完整导出和 --from-history 导出的 YAML 都可能包含本机 prefix、具体构建和 Channel 信息。提交到版本库前应检查并删除不应共享的 prefix,且不要把本机绝对路径或凭据写入文件。
5.3 使用新版导出命令
Conda 25.7 及之后增强了 conda export:
# 可维护的 YAML;先导出到新文件,再人工合并 pip 依赖
conda export --name demo --from-history \
--format=environment-yaml --file environment.from-history.yml
# 当前平台的完整显式规格
conda export --name demo \
--format=explicit --file demo-explicit.txt
同平台精确复现也可以使用传统显式规格:
conda list -n demo --explicit > demo-explicit.txt
conda create -n demo --file demo-explicit.txt
显式规格通常绑定一个操作系统和架构,不应直接当作跨平台文件使用。它主要记录 Conda 管理的包,pip 安装的包仍应单独导出到 requirements.txt 或其他声明式文件。
Conda 26.5 及之后还支持原生多平台锁文件:
conda export --name demo --file conda-lock.yaml \
--platform linux-64 \
--platform osx-64 \
--platform win-64
conda create --name demo --file conda-lock.yaml
锁文件适合 CI 和生产环境,但生成时必须确认各平台都有对应构建。原生 Conda 锁文件主要覆盖 Conda 管理的包,不应假定它已经完整记录普通 pip 或 uv 安装的依赖;这类依赖仍应保留独立的锁定文件或 requirements.txt。此外,精确复现仍要求原 Channel 中的固定构建持续可用。
5.4 如何选择环境文件
| 文件 | 主要用途 | 跨平台 | 普通 pip 依赖 |
|---|---|---|---|
手工维护的 environment.yml |
日常开发和团队协作 | 较好,取决于各平台是否有对应构建 | 可通过 pip: 显式记录 |
--from-history 导出的 YAML |
保留 Conda 显式安装请求 | 较好,但不完整;应删除 prefix: |
不会导出 |
完整 conda env export YAML |
记录解析后的 Conda 和 pip 状态 | 中等,可能包含构建和本机 prefix |
会列出 |
explicit.txt |
同操作系统和架构的精确复现 | 差,不应跨平台使用 | 不包含 |
原生 conda-lock.yaml |
指定平台的精确锁定 | 对已列出的平台最好 | 仍需独立记录 |
environment.from-history.yml 只是本文使用的导出文件名,并不是一种独立格式。旧版 Conda 或需要额外锁文件能力时,也可以评估第三方 conda-lock 工具,但它与 Conda 26.5+ 的原生锁文件不是同一实现。
5.5 环境专属变量
Conda 可以把项目变量保存到环境中:
conda env config vars set MY_PROJECT_ENV=dev -n demo
conda env config vars list -n demo
conda env config vars unset MY_PROJECT_ENV -n demo
设置后需要重新激活环境。也可以在 environment.yml 中声明非敏感变量:
variables:
MY_PROJECT_ENV: dev
环境变量会出现在环境导出文件中,因此不要把 Token、密码或私钥写入共享 YAML;敏感值应由 CI Secret、密钥管理器或运行时注入。
6. Conda 与 pip 混用
通过普通 python -m pip 安装时,Conda 和 pip 可以共存,但两者维护的包元数据相互独立:
- Conda 求解器不会把 pip 安装的包当成受 Conda 管理的依赖。
- 后续 Conda 操作可能覆盖或删除与 pip 包同名的文件。
- 同一个发行包不要同时交给 Conda 和 pip 管理。
推荐原则:
- 先查看框架官方推荐的安装方式和 Channel。
- 同一环境中的同一个包只选择一个主要安装来源。
- 在专用项目环境中混用,不要污染
base。 - 需要 pip 时使用当前环境的解释器执行
python -m pip。 - 将 pip 依赖写入
requirements.txt或environment.yml的pip:区域。 - 怀疑依赖状态不一致时,优先重建环境,而不是继续覆盖安装。
conda activate demo
python -m pip install requests
python -m pip check
conda list
Conda 官方建议尽量先使用 Conda 安装可用包,再用 pip 补足其余软件;但 PyTorch 等项目经常把官方 wheel 作为首选方案,因此“所有底层包都必须使用 Conda”并不是通用规则。
官方 latest 文档中的 conda-pypi 工作流标记为 Conda 26.9+,但在本文章基线日期(2026-09-25)该版本尚未正式发布,因此应视为前瞻信息,不要在当前版本上直接照抄。它要求 Rattler solver;正式发布后,配置流程应包括:
conda install --name base "conda>=26.9" "conda-rattler-solver>=0.1.1"
conda list | grep rattler
conda config --set solver rattler
conda config --append channels conda-pypi
该能力仅覆盖受支持的纯 Python wheel,客户端限定为 Conda,并且安装时仍需连接 PyPI;它不是普通 pip 工作流的完全替代品。
上面的 solver: rattler 是用户级配置,会影响该用户后续创建或更新的环境;使用前应确认其他项目是否依赖 libmamba。conda-pypi 被追加到 Channel 列表末尾,是为了保持较低优先级。它只提供纯 Python wheel,没有编译二进制,因此与 defaults、conda-forge 混用的 ABI 风险不同。启用或撤销后都应检查:
conda config --show solver channels
不要使用:
python -m pip install --user some-package
--user 不适合声明项目依赖。venv 通常会拒绝该选项,但普通 Conda 环境不一定被 pip 识别为 venv,可能允许它把包安装到用户目录(例如 Linux/macOS 的 ~/.local),从而绕过项目环境;在 base 或 Conda 环境之外使用时尤其危险。
6.1 使用 uv 管理 Python 依赖
一种可行的组合是让 Conda 管理 Python、编译库和原生依赖,让 uv 管理纯 Python 包及其锁文件。应显式把 uv 指向当前 Conda 环境的解释器:
conda create -n app python=3.12
conda activate app
uv pip install --python "$(python -c 'import sys; print(sys.executable)')" -r requirements.txt
PowerShell 可以使用:
conda create -n app python=3.12
conda activate app
$python = python -c "import sys; print(sys.executable)"
uv pip install --python $python -r requirements.txt
如果需要可重复安装的 Python 依赖,可把输入和锁定文件分开:
uv pip compile --python "$(python -c 'import sys; print(sys.executable)')" \
requirements.in -o requirements.txt
uv pip sync --python "$(python -c 'import sys; print(sys.executable)')" \
-r requirements.txt
uv 可以根据已激活 Conda 环境的 CONDA_PREFIX 自动发现目标,但显式传入 --python 更容易审计和复现。安装后应通过 python -c "import sys; print(sys.executable)" 和 uv pip list --python <path> 核对目标。相关命令见 uv 的 pip environments 文档。
7. Mamba、libmamba 与 Micromamba
Mamba 是与 Conda 软件包和环境格式兼容的客户端,使用更快的依赖求解实现。Miniforge 默认同时提供 conda 和 mamba。
需要注意:
- 截至已发布的 Conda 26.7.x,通常默认使用 libmamba 求解器;先执行
conda config --show solver检查,不必为了性能额外安装 Mamba。官方后续文档可能调整默认求解器,仍应以本机配置为准。 - Mamba 不是另一套 Channel 体系,也不会自动消除 Channel 混用造成的依赖冲突。
- Mambaforge 已停止维护,新安装应使用 Miniforge。
- Micromamba 是独立、无需
base的轻量可执行文件,更适合 CI、Docker 和自动化环境。
如果当前 Conda 安装确实需要补充 Mamba,应确保 Channel 策略与整个安装保持一致,避免在 base 中无规划地混入不兼容构建:
conda install -n base --override-channels -c conda-forge mamba
mamba --version
常规使用;环境激活继续使用已经初始化的 Conda Shell 即可:
mamba create -n demo python=3.11 numpy
conda activate demo
mamba install scipy
官方资料:
8. GPU 与 CUDA(可选)
先区分三个概念:
- NVIDIA Driver:让操作系统与 GPU 通信;没有兼容驱动,CUDA 程序无法使用 GPU。
- CUDA Runtime:供程序运行 CUDA API,不必包含完整开发工具。
- CUDA Toolkit:包含
nvcc、头文件、调试和开发工具;编译自定义 CUDA 扩展时通常需要。
检查驱动和 GPU:
nvidia-smi
nvidia-smi 显示的 CUDA Version 通常表示当前驱动最高支持的 CUDA 版本,不等于系统中安装了对应版本的完整 Toolkit。
下面的命令只创建 Python 环境,没有安装 CUDA:
conda create -n torch python=3.11
conda activate torch
安装 PyTorch 时,应从 PyTorch 官方安装页面选择操作系统、Python、CUDA 或 CPU 构建,并复制页面生成的命令。不同 PyTorch 版本支持的 CUDA 版本不同,不宜在长期文档中固定 pytorch-cuda=12.x。
安装后验证:
python -c "import torch; print('torch:', torch.__version__); print('CUDA available:', torch.cuda.is_available()); print('CUDA runtime:', torch.version.cuda)"
预编译 Conda 包或 wheel 通常可以携带所需 CUDA Runtime,因此不一定需要单独安装系统级 CUDA Toolkit;但编译扩展或开发 CUDA 程序时,通常仍需要兼容的 Toolkit、编译器和 nvcc。
9. Shell 初始化
conda activate 和 conda deactivate 依赖 Shell 初始化。常见 Shell 的初始化命令为:
conda init bash
conda init zsh
conda init fish
conda init powershell
9.1 初始化和运行方式
初始化后重新打开终端。查看将要修改哪些文件:
conda init --dry-run bash
撤销最近一次 Bash 初始化:
conda init --reverse bash
如果只是非交互式脚本,不一定需要修改 Shell 配置。可以在当前 Bash 中加载 Hook:
eval "$(conda shell.bash hook)"
conda activate demo
或者直接使用 conda run:
conda run -n demo python script.py
如果只希望让 conda 可执行而不加载 Shell 函数,可以使用侵入性更小的方式(Conda 25.5+):
conda init --condabin bash
9.2 base 环境自动激活
Conda 25.5 及之后的配置名是 auto_activate:
conda config --set auto_activate false
conda config --show auto_activate
Conda 25.5 以前的版本使用 auto_activate_base;它在 25.5 被弃用,并已在 26.3 移除。可以检查本机接受的配置项和来源:
conda config --describe auto_activate
conda config --show-sources
如果只希望 conda 命令可用,但不希望其环境中的 Python 覆盖系统 Python,关闭自动激活通常比直接把安装目录永久加入 PATH 更安全。
9.3 PowerShell 初始化被阻止
如果 conda init powershell 后出现“禁止运行脚本”,先查看组织策略和当前用户策略:
Get-ExecutionPolicy -List
如果这是个人机器,且组织策略允许,可以在知情后为当前用户设置:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
然后重新打开 PowerShell。管理设备应遵循组织安全策略,不要为了 Conda 盲目使用 Unrestricted 或 Bypass。
10. 配置国内镜像(按需)
镜像是否可用、同步范围和支持平台可能变化。配置前应打开镜像站帮助页确认,不要长期复制已经失效的临时命令。
以清华 TUNA 为例:
10.1 镜像 Anaconda 官方仓库
如果镜像站提供 main、r 和 msys2,可以在用户级 .condarc 中配置 default_channels。下面的 custom_channels 只展示常见配置方式,不是镜像站支持的完整 Channel 列表;实际配置应完整参考镜像站当前帮助页:
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
Conda 26.1 及之后也可以用 custom_multichannels 定义 defaults,但 default_channels 仍受支持;应以本机版本的 conda config --describe 和镜像站说明为准。
10.2 只镜像社区 Channel
如果不希望访问 defaults:
channels:
- conda-forge
- nodefaults
show_channel_urls: true
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
Mamba 还可以按镜像站当前说明使用 mirrored_channels,例如:
mirrored_channels:
conda-forge:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
上面的 10.1“官方仓库镜像”和 10.2“仅社区 Channel”是两种基础配置,不应把 defaults 镜像与 nodefaults 方案直接拼在一起。custom_channels 供 Conda 使用,而 mirrored_channels 供 Mamba 使用;它们不是彼此替代的配置,是否同时出现取决于实际客户端和镜像需求。
修改后检查配置并刷新索引:
conda config --show channels
conda config --show-sources
conda clean --index-cache
conda clean --all 主要用于清理包缓存、索引缓存、Tarball 和日志,不会修复一般的依赖冲突;不要把它当成 UnsatisfiableError 的通用解决方案。
11. IDE 与 Jupyter 集成
11.1 PyCharm
PyCharm 可以创建或选择已有的 Conda 环境:
- 打开 Settings/Preferences,进入 Python Interpreter。
- 点击 Add Interpreter。
- 选择 Add Local Interpreter,再选择 Conda。
- 新建环境时选择 Python 版本并填写环境名称;已有环境时,从列表中选择目标环境。
- 如果 PyCharm 没有自动找到 Conda,可手动指定
conda可执行文件。 - 保存后,在 Python Interpreter 选择器中确认项目使用的解释器。
先在终端确认环境和解释器路径:
conda env list
conda run -n demo python -c "import sys; print(sys.executable)"
11.2 VS Code
- 安装或启用 Microsoft Python 扩展。
- 打开命令面板,运行 Python: Select Interpreter。
- 选择现有 Conda 环境,或直接选择
./.conda-env/bin/python(Windows 为./.conda-env/python.exe)。 - 在新终端中确认 VS Code 使用的解释器与项目环境一致:
python -c "import sys; print(sys.executable); print(sys.prefix)"
11.3 Jupyter
把 Conda 环境注册为 Jupyter Kernel:
conda install -n demo ipykernel
conda run -n demo python -m ipykernel install --user \
--name demo \
--display-name "Python (demo)"
conda run -n demo jupyter kernelspec list
kernelspec list 读取的是用户级 Kernel 目录,只要运行环境安装了 Jupyter 即可查看,不要求 Kernel 恰好安装在同一个 Conda 环境中。
这里 ipykernel install --user 的 --user 表示把 Kernel 配置安装到当前用户的数据目录,不是执行 pip install --user,因此不会把 Python 包绕过 Conda 环境安装。
相关文档:
12. 项目、服务器和 CI 实践
12.1 项目结构与 CI
推荐把声明式环境文件放在项目根目录:
project/
├── environment.yml
├── requirements.txt
├── docker/
│ └── entrypoint.sh
├── src/
└── README.md
部署或持续集成时创建独立环境,不修改 base。Conda 26.3 及之后可以显式覆盖文件中的名称,并跳过交互确认:
conda create --yes --name demo --file environment.yml
conda run --no-capture-output -n demo python -m pytest
--no-capture-output 会让 stdout/stderr 实时显示,适合 CI 日志;Conda 26.1+ 也可以使用简写 -s。旧版 Conda 应改用 conda env create -f environment.yml -y。
实践建议:
- 将
environment.yml提交到版本库,但不要提交.conda-env等实际环境目录。 - 在一个干净环境中测试创建流程。
- 重要发布使用显式规格或锁文件,而不是只写宽松的包名。
- CI 按操作系统和架构分别创建与求解环境,不用
CONDA_SUBDIR长期强制错误的平台。 - CI 中缓存下载包或固定的环境前缀前,确认缓存与平台、Channel 权限和密钥匹配。
- 容器中只需要执行一条命令时,优先使用
conda run;自动化环境可考虑 Micromamba。 - 不要在
base中维护每个项目的业务依赖。 - 不要把 Token、镜像凭据或机器专属绝对路径写入共享环境文件。
12.2 Docker 示例
使用 Miniforge 官方镜像,并在构建阶段创建项目环境。下面使用入口脚本激活环境后 exec 用户命令,使容器能够正确转发停止信号:
FROM condaforge/miniforge3:latest
ARG ENV_NAME=demo
ENV ENV_NAME=${ENV_NAME}
COPY environment.yml .
RUN conda create --yes --name "${ENV_NAME}" --file environment.yml \
&& conda clean --yes --all
COPY src ./src
COPY docker/entrypoint.sh /usr/local/bin/conda-entrypoint
RUN chmod +x /usr/local/bin/conda-entrypoint
ENTRYPOINT ["/usr/local/bin/conda-entrypoint"]
CMD ["python", "app.py"]
docker/entrypoint.sh:
#!/usr/bin/env bash
set -euo pipefail
source /opt/conda/etc/profile.d/conda.sh
conda activate "${ENV_NAME}"
exec "$@"
上面的 CMD 假设入口文件是 src/app.py,需要按项目结构调整。运行容器时可加 --init 处理 PID 1 的信号和僵尸进程:
docker run --init -p 8000:8000 my-image
生产环境应固定基础镜像版本或 digest,并优先使用锁文件创建环境;不要在容器里修改 base。如果使用 Micromamba 或自定义镜像,入口脚本中的 Conda 安装路径也要相应调整。示例中的 conda create --file 需要基础镜像包含 Conda 26.3+;更早的镜像应改用 conda env create -f environment.yml --yes。
参考:Miniforge 容器镜像。
13. 常见排查
13.1 通用检查
conda --version
conda info
conda config --show
conda config --show-sources
conda env list
conda list
conda doctor
如果本机支持 conda doctor --fix(Conda 26.1+),修复前先预览:
conda doctor --fix --dry-run
13.2 平台或架构不匹配
先确认当前平台:
conda info
Apple Silicon、Intel、Linux x86_64 和 Linux ARM 使用不同的 Conda 子目录。可以通过 --platform 为一次创建操作指定目标平台:
conda create --platform osx-arm64 --name native-arm python=3.11
CONDA_SUBDIR=osx-arm64 conda create --name native-arm-env python=3.11
CONDA_SUBDIR 只应在明确需要时临时设置;不要让错误值长期留在 Shell 或 CI 配置中。强制跨操作系统创建环境通常不可行。
13.3 虚拟包与系统能力
Conda 会把主机能力表示成“虚拟包”,供求解器判断包是否可安装。例如:
__cuda:检测到的 NVIDIA 驱动 CUDA 能力__glibc、__linux、__unix、__osx、__win:系统 ABI 和操作系统__archspec:CPU 架构能力- 还可能包括
__conda;在 musl 系统上,Linux 虚拟包可能表现为__musl而不是__glibc
查看当前检测结果:
conda info
虚拟包不是 Conda 安装的软件,而是对当前系统的描述。如果求解器提示 package requires __cuda >= 12,应先检查 NVIDIA 驱动、当前 Conda 平台以及包实际支持的构建,不应直接伪造版本。
仅在为目标平台执行 --dry-run 等求解操作、且确实缺少对应主机信息时,才考虑临时覆盖:
CONDA_OVERRIDE_CUDA=12.4 conda create --dry-run some-package
跨操作系统求解时,官方文档还建议根据目标系统补充相应变量,例如:
CONDA_OVERRIDE_LINUX=1 CONDA_OVERRIDE_GLIBC=2.17 \
conda create --dry-run --platform linux-64 some-package
可用 conda config --describe override_virtual_packages 查看当前版本支持的覆盖配置。覆盖值必须与真实执行环境一致,否则求解成功也不代表环境能够运行。
13.4 PackagesNotFoundError
常见原因:
- Channel 中没有该包或该版本。
- 当前 Python 版本、操作系统或架构不匹配。
- 镜像没有同步目标子目录。
- 旧 Channel 元数据仍被缓存。
排查:
conda search -c conda-forge --override-channels package-name
conda clean --index-cache
如果指定包名确实存在,再检查它支持的 Python 版本和平台构建。
13.5 UnsatisfiableError 或依赖冲突
conda clean --all 不能解决一般的版本冲突。应优先:
- 阅读错误末尾列出的冲突包。
- 使用
conda search <package> --info查看依赖。 - 检查是否混用了不兼容的
defaults与conda-forge构建。 - 放宽或修正 Python、框架和 CUDA 的版本约束。
- 在新环境中按声明式文件重新安装。
只有确认索引缓存损坏时,才优先执行:
conda clean --index-cache
13.6 conda activate 不可用
先区分两种情况:
conda --version
type conda
PowerShell 可以使用:
Get-Command conda
Get-ExecutionPolicy -List
- 如果
conda命令本身都找不到,说明安装目录不在PATH,可先使用 Conda 可执行文件的完整路径。 - 如果
conda可用但没有activateShell 函数,运行conda init <shell>并重新打开终端,或在当前脚本中加载 Hook。 - 非交互式脚本优先使用
conda run -n <env> <command>。
13.7 激活了错误环境或 Python
conda env list
conda info --envs
which python
python -c "import sys; print(sys.executable); print(sys.prefix)"
Windows 可以使用:
where.exe python
13.8 Conda 与 pip 状态不一致
conda list
python -m pip check
如果同一个包同时出现 Conda 和 pip 记录,或 Conda 操作后行为异常,最稳妥的恢复方式通常是:保存必要规格,创建新环境,然后按顺序重新安装。
14. 最佳实践清单
- 开始前检查 Conda 版本;版本敏感命令以本机
--help为准。 - 为每个项目创建独立环境,保持
base精简。 - 使用项目本地
--prefix环境时,将环境目录加入.gitignore。 - 明确选择
defaults或conda-forge作为默认 Channel,避免长期无规划混用。 - 确实需要混用时启用
channel_priority: strict,并理解它可能使环境无解。 - 一个包只由 Conda 或 pip 中的一个来源管理。
--from-history导出后人工检查,删除prefix:,并单独保留普通 pip 依赖。- 优先遵循框架官方安装说明,尤其是 PyTorch、CUDA 和编译型包。
- 提交声明式环境文件,同时按需保留显式规格或锁文件。
- 把“日常可维护的 YAML”和“发布时精确的锁文件”分开管理。
- 环境变量只保存非敏感值,Token 和密码由外部注入。
- Shell 中使用
conda activate,脚本和 CI 中优先使用conda run --no-capture-output。 - 在 Apple Silicon、Linux ARM 和 x86_64 上分别验证平台构建。
- 遇到
__cuda、__glibc等虚拟包问题时,先核对真实系统能力,不伪造版本。 - 根据协作、同平台复现和生产锁定场景选择不同环境文件。
- 使用 uv 等工具时显式指定当前 Conda 环境的解释器。
- 镜像变更后检查配置来源、平台支持和索引缓存。
- 更新
base或批量更新环境前,先准备修订历史、导出文件或重建方案。
15. 参考资料
- Conda 官方文档
- Conda Channels
- Channel 配置最佳实践
- Conda 命令参考
- Conda 配置参考
- Conda 环境管理
- Conda 软件包管理
conda doctor- Conda 25.5.0 Release
- Conda 25.7.0 Release
- Conda 26.1.0 Release
- Conda 26.3.0 Release
- Conda 26.5.0 Release
- Miniforge
- Mamba 文档
- PyTorch 安装页面
- NVIDIA CUDA Installation Guide
- Anaconda 服务条款
AI 修改声明
本文由 LLM 依据 ref/anacoda-introduce.md 整理,并参考上述官方文档补充和核对内容。最近修改时间:2026-09-25 23:55(UTC+08:00)。