Skip to content

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 是否可用 ​

powershell
conda --version
conda info --envs
  • conda --version 检查 conda 版本。
  • conda info --envs 查看现有虚拟环境,也可以写成 conda env list。

如果 PowerShell 中找不到 conda,最直接的方式是打开 Anaconda Prompt。如果 conda 命令可用、但 conda activate 提示 shell 尚未初始化,可以执行:

powershell
conda init powershell

然后关闭并重新打开 PowerShell。

2. 创建虚拟环境 ​

创建一个使用 Python 3.11 的环境:

powershell
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自动确认创建,不再逐项询问

创建完成后查看环境:

powershell
conda env list

输出中可以看到 fastapi-demo 及其安装路径。环境名称只是标识,真正的 Python 和安装包都保存在该环境自己的目录中。

如果提示环境已经存在,可以换一个新名称,例如:

powershell
conda create -n fastapi-demo-2 python=3.11 pip -y

不要在未确认旧环境用途时直接覆盖或删除它。

3. 激活和退出虚拟环境 ​

激活环境 ​

powershell
conda activate fastapi-demo

激活后,终端提示符通常会出现:

text
(fastapi-demo)

不要只依赖提示符判断环境,还可以检查当前 Python 的实际路径:

powershell
python --version
python -c "import sys; print(sys.executable)"

输出的路径应指向 fastapi-demo 环境。以后安装包和运行项目前,都可以用这个命令确认没有误用 base 或其他环境。

退出当前环境 ​

powershell
conda deactivate

退出项目环境不代表删除环境,环境中的 Python 和安装包仍然保留。下次继续开发时重新执行 conda activate fastapi-demo 即可。

4. 查看虚拟环境中的安装包 ​

先激活要查看的环境:

powershell
conda activate fastapi-demo

使用 conda 查看 ​

powershell
conda list

只查看某个包,例如 requests:

powershell
conda list requests

不激活环境时,也可以通过 -n 指定环境:

powershell
conda list -n fastapi-demo

使用 pip 查看 ​

如果安装包是通过 pip 安装的,可以执行:

powershell
python -m pip list

查看某个包的版本、安装位置和依赖信息:

powershell
python -m pip show fastapi

这里推荐使用 python -m pip,因为它明确调用当前 Python 对应的 pip,比单独执行 pip 更容易确认安装到了哪个环境。

5. 在虚拟环境中安装软件包 ​

使用 conda 安装 ​

先激活环境:

powershell
conda activate fastapi-demo

安装一个包:

powershell
conda install requests -y

一次安装多个包:

powershell
conda install numpy pandas -y

安装指定版本:

powershell
conda install numpy=1.26 -y

从 conda-forge 渠道安装:

powershell
conda install -c conda-forge requests -y

也可以不激活环境,直接指定安装目标:

powershell
conda install -n fastapi-demo requests -y

使用 pip 安装 ​

如果 conda 仓库没有所需软件包,或者项目本身就使用 pip 管理 Python 依赖,可以在激活环境后安装。例如:

powershell
conda activate fastapi-demo
python -m pip install "fastapi[standard]" "pydantic>=2,<3" uvicorn

安装后检查:

powershell
python -m pip show fastapi
python -c "import fastapi; print(fastapi.__version__)"

同一个环境可以包含 conda 和 pip 安装的包,但应避免没有计划地反复混用。通常先安装 conda 包,再安装 conda 仓库中缺少的 pip 包;不要未经确认就用另一种工具覆盖同一个关键依赖。

删除某个安装包 ​

使用 conda 安装的包,优先通过 conda 删除:

powershell
conda remove -n fastapi-demo requests -y

使用 pip 安装的包,激活环境后通过 pip 删除:

powershell
conda activate fastapi-demo
python -m pip uninstall fastapi -y

删除包和删除整个虚拟环境是两回事:删除包只影响指定依赖,删除环境会移除该环境中的全部 Python 包。

6. 导出安装包清单 ​

依赖清单记录“需要安装哪些包”,通常不包含项目源代码,也不等于下载了完整的软件安装包。

常用的两种清单如下:

清单适用情况能记录的内容
environment.ymlconda 环境,或 conda 与 pip 混合使用Python、conda 包、渠道,以及可识别的 pip 包
requirements.txt项目依赖主要由 pip 管理pip 能识别的 Python 包及版本

方式一:导出 environment.yml ​

powershell
conda env export -n fastapi-demo --no-builds -f environment.yml
  • -n fastapi-demo 指定要导出的环境。
  • --no-builds 去掉过于具体的构建编号,通常更适合迁移。
  • -f environment.yml 将结果直接写入文件。

导出后打开 environment.yml,可以看到类似结构:

yaml
name: fastapi-demo
channels:
  - defaults
dependencies:
  - python=3.11
  - pip
  - requests
  - pip:
      - fastapi

实际内容以本机安装情况为准。完整导出可能包含平台相关依赖,因此 --no-builds 能提高可移植性,但不能保证一份清单在所有操作系统上都得到完全相同的环境。

方式二:导出 requirements.txt ​

如果项目依赖是通过 pip 安装的,先激活环境,再导出:

powershell
conda activate fastapi-demo
python -m pip freeze > requirements.txt

文件内容类似:

text
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,进入项目目录后执行:

powershell
conda env create -f environment.yml
conda activate fastapi-demo
conda list

conda env create 会读取文件中的环境名称、Python 版本和依赖并创建环境。如果提示同名环境已存在,可以修改 YAML 文件顶部的 name: 使用新名称,或者先确认旧环境不再需要,再按后文方法删除。

创建完成后,建议运行项目测试或至少检查关键包:

powershell
python -c "import sys; print(sys.executable)"
python -c "import fastapi; print(fastapi.__version__)"

使用 requirements.txt 恢复 ​

requirements.txt 不负责创建 conda 环境,所以要先创建并激活环境:

powershell
conda create -n fastapi-demo python=3.11 pip -y
conda activate fastapi-demo
python -m pip install -r requirements.txt

安装完成后检查:

powershell
python -m pip list

这里的 Python 版本应根据原项目要求选择。如果原项目不是 Python 3.11,需要把创建命令中的版本号相应替换。

8. 可选:下载真实安装包用于离线迁移 ​

如果目标机器不能联网,仅有 requirements.txt 不够,因为它只记录包名和版本。可以在联网机器上把 pip 安装包下载到 packages 目录:

powershell
conda activate fastapi-demo
python -m pip download -r requirements.txt -d packages

迁移时带上:

text
项目目录/
├─ requirements.txt
└─ packages/
   ├─ 下载的 wheel 文件
   └─ 其他安装包文件

目标机器创建并激活环境后,执行离线安装:

powershell
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. 删除整个虚拟环境 ​

如果当前正在使用要删除的环境,先退出:

powershell
conda deactivate

确认环境名称:

powershell
conda env list

删除 fastapi-demo 环境:

powershell
conda env remove -n fastapi-demo -y

也可以使用等价的 --all 写法:

powershell
conda remove -n fastapi-demo --all -y

两条命令选择一条执行即可。删除后再次检查:

powershell
conda env list

删除虚拟环境会移除其中的 Python 和全部安装包,但不会自动删除你的项目源代码、environment.yml 或 requirements.txt。 操作前务必确认环境名称,避免误删仍在使用的环境。

常用流程回顾 ​

创建并使用环境:

powershell
conda create -n fastapi-demo python=3.11 pip -y
conda activate fastapi-demo
python -m pip install "fastapi[standard]"
conda list

导出并迁移:

powershell
conda env export -n fastapi-demo --no-builds -f environment.yml
conda env create -f environment.yml
conda activate fastapi-demo

不再使用时删除:

powershell
conda deactivate
conda env remove -n fastapi-demo -y