Anaconda 虚拟环境与安装包管理
Anaconda 和 conda 分别是什么
Anaconda 是包含 Python、conda 以及许多科学计算软件的发行版。conda 是实际用来管理虚拟环境和软件包的命令行工具。
虚拟环境用来隔离不同项目的 Python 版本和依赖。例如,一个项目使用 Python 3.11,另一个项目使用 Python 3.12,可以分别创建环境,避免安装包互相影响。
本文统一使用一个名为 fastapi-demo 的环境,命令可以在 Windows 的 Anaconda Prompt 中执行。若 PowerShell 已正确初始化 conda,也可以在 PowerShell 中执行。
安装 conda 和 Anaconda
从 Anaconda 官方网站 下载并安装 Anaconda。 选择 Anaconda Distribution
1. 检查 conda 是否可用
conda --version
conda info --envsconda --version检查 conda 版本。conda info --envs查看现有虚拟环境,也可以写成conda env list。
如果 PowerShell 中找不到 conda,最直接的方式是打开 Anaconda Prompt。如果 conda 命令可用、但 conda activate 提示 shell 尚未初始化,可以执行:
conda init powershell然后关闭并重新打开 PowerShell。
2. 创建虚拟环境
创建一个使用 Python 3.11 的环境:
conda create -n fastapi-demo python=3.11 pip -y参数含义:
| 参数 | 作用 |
|---|---|
-n fastapi-demo | 指定环境名称,-n 是 --name 的简写 |
python=3.11 | 在环境中安装 Python 3.11 |
pip | 同时安装 pip,便于之后安装 PyPI 包 |
-y | 自动确认创建,不再逐项询问 |
创建完成后查看环境:
conda env list输出中可以看到 fastapi-demo 及其安装路径。环境名称只是标识,真正的 Python 和安装包都保存在该环境自己的目录中。
如果提示环境已经存在,可以换一个新名称,例如:
conda create -n fastapi-demo-2 python=3.11 pip -y不要在未确认旧环境用途时直接覆盖或删除它。
3. 激活和退出虚拟环境
激活环境
conda activate fastapi-demo激活后,终端提示符通常会出现:
(fastapi-demo)不要只依赖提示符判断环境,还可以检查当前 Python 的实际路径:
python --version
python -c "import sys; print(sys.executable)"输出的路径应指向 fastapi-demo 环境。以后安装包和运行项目前,都可以用这个命令确认没有误用 base 或其他环境。
退出当前环境
conda deactivate退出项目环境不代表删除环境,环境中的 Python 和安装包仍然保留。下次继续开发时重新执行 conda activate fastapi-demo 即可。
4. 查看虚拟环境中的安装包
先激活要查看的环境:
conda activate fastapi-demo使用 conda 查看
conda list只查看某个包,例如 requests:
conda list requests不激活环境时,也可以通过 -n 指定环境:
conda list -n fastapi-demo使用 pip 查看
如果安装包是通过 pip 安装的,可以执行:
python -m pip list查看某个包的版本、安装位置和依赖信息:
python -m pip show fastapi这里推荐使用 python -m pip,因为它明确调用当前 Python 对应的 pip,比单独执行 pip 更容易确认安装到了哪个环境。
5. 在虚拟环境中安装软件包
使用 conda 安装
先激活环境:
conda activate fastapi-demo安装一个包:
conda install requests -y一次安装多个包:
conda install numpy pandas -y安装指定版本:
conda install numpy=1.26 -y从 conda-forge 渠道安装:
conda install -c conda-forge requests -y也可以不激活环境,直接指定安装目标:
conda install -n fastapi-demo requests -y使用 pip 安装
如果 conda 仓库没有所需软件包,或者项目本身就使用 pip 管理 Python 依赖,可以在激活环境后安装。例如:
conda activate fastapi-demo
python -m pip install "fastapi[standard]" "pydantic>=2,<3" uvicorn安装后检查:
python -m pip show fastapi
python -c "import fastapi; print(fastapi.__version__)"同一个环境可以包含 conda 和 pip 安装的包,但应避免没有计划地反复混用。通常先安装 conda 包,再安装 conda 仓库中缺少的 pip 包;不要未经确认就用另一种工具覆盖同一个关键依赖。
删除某个安装包
使用 conda 安装的包,优先通过 conda 删除:
conda remove -n fastapi-demo requests -y使用 pip 安装的包,激活环境后通过 pip 删除:
conda activate fastapi-demo
python -m pip uninstall fastapi -y删除包和删除整个虚拟环境是两回事:删除包只影响指定依赖,删除环境会移除该环境中的全部 Python 包。
6. 导出安装包清单
依赖清单记录“需要安装哪些包”,通常不包含项目源代码,也不等于下载了完整的软件安装包。
常用的两种清单如下:
| 清单 | 适用情况 | 能记录的内容 |
|---|---|---|
environment.yml | conda 环境,或 conda 与 pip 混合使用 | Python、conda 包、渠道,以及可识别的 pip 包 |
requirements.txt | 项目依赖主要由 pip 管理 | pip 能识别的 Python 包及版本 |
方式一:导出 environment.yml
conda env export -n fastapi-demo --no-builds -f environment.yml-n fastapi-demo指定要导出的环境。--no-builds去掉过于具体的构建编号,通常更适合迁移。-f environment.yml将结果直接写入文件。
导出后打开 environment.yml,可以看到类似结构:
name: fastapi-demo
channels:
- defaults
dependencies:
- python=3.11
- pip
- requests
- pip:
- fastapi实际内容以本机安装情况为准。完整导出可能包含平台相关依赖,因此 --no-builds 能提高可移植性,但不能保证一份清单在所有操作系统上都得到完全相同的环境。
方式二:导出 requirements.txt
如果项目依赖是通过 pip 安装的,先激活环境,再导出:
conda activate fastapi-demo
python -m pip freeze > requirements.txt文件内容类似:
fastapi==0.115.0
pydantic==2.9.2
uvicorn==0.30.6这里的版本号仅作格式演示,以实际导出结果为准。
requirements.txt 不能完整描述 conda 环境中的 Python 版本、conda 专用包和非 Python 系统库。因此,混合使用 conda 与 pip 时,优先使用 environment.yml;纯 pip 项目使用 requirements.txt 更直接。
7. 项目移植后安装全部依赖
迁移项目时,除了源代码,还要带上相应的依赖清单。通常不需要复制原虚拟环境目录,而是在新机器上重新创建环境。
使用 environment.yml 恢复
将 environment.yml 放在项目根目录,在新机器上打开 Anaconda Prompt,进入项目目录后执行:
conda env create -f environment.yml
conda activate fastapi-demo
conda listconda env create 会读取文件中的环境名称、Python 版本和依赖并创建环境。如果提示同名环境已存在,可以修改 YAML 文件顶部的 name: 使用新名称,或者先确认旧环境不再需要,再按后文方法删除。
创建完成后,建议运行项目测试或至少检查关键包:
python -c "import sys; print(sys.executable)"
python -c "import fastapi; print(fastapi.__version__)"使用 requirements.txt 恢复
requirements.txt 不负责创建 conda 环境,所以要先创建并激活环境:
conda create -n fastapi-demo python=3.11 pip -y
conda activate fastapi-demo
python -m pip install -r requirements.txt安装完成后检查:
python -m pip list这里的 Python 版本应根据原项目要求选择。如果原项目不是 Python 3.11,需要把创建命令中的版本号相应替换。
8. 可选:下载真实安装包用于离线迁移
如果目标机器不能联网,仅有 requirements.txt 不够,因为它只记录包名和版本。可以在联网机器上把 pip 安装包下载到 packages 目录:
conda activate fastapi-demo
python -m pip download -r requirements.txt -d packages迁移时带上:
项目目录/
├─ requirements.txt
└─ packages/
├─ 下载的 wheel 文件
└─ 其他安装包文件目标机器创建并激活环境后,执行离线安装:
python -m pip install --no-index --find-links=packages -r requirements.txt--no-index不访问 PyPI。--find-links=packages从本地packages目录查找安装包。
包含二进制扩展的包通常与操作系统、CPU 架构和 Python 版本有关。离线包最好在目标平台相同的机器上下载,或者明确为目标平台准备对应 wheel。此方法只覆盖 pip 依赖,不会自动打包 conda 专用依赖。
9. 删除整个虚拟环境
如果当前正在使用要删除的环境,先退出:
conda deactivate确认环境名称:
conda env list删除 fastapi-demo 环境:
conda env remove -n fastapi-demo -y也可以使用等价的 --all 写法:
conda remove -n fastapi-demo --all -y两条命令选择一条执行即可。删除后再次检查:
conda env list删除虚拟环境会移除其中的 Python 和全部安装包,但不会自动删除你的项目源代码、environment.yml 或 requirements.txt。 操作前务必确认环境名称,避免误删仍在使用的环境。
常用流程回顾
创建并使用环境:
conda create -n fastapi-demo python=3.11 pip -y
conda activate fastapi-demo
python -m pip install "fastapi[standard]"
conda list导出并迁移:
conda env export -n fastapi-demo --no-builds -f environment.yml
conda env create -f environment.yml
conda activate fastapi-demo不再使用时删除:
conda deactivate
conda env remove -n fastapi-demo -y