管理包命令示例
conda
安装包
1
2# 从虚拟环境 your_env_name 中安装 packge_name包
conda install -n your_env_name package_name删除包
1
2# 在虚拟环境 your_env_name 中删除 package_name包
conda remove -n your_env_name package_name关于conda 命令更多详情参考Anaconda——安装和常用命令
pip
安装包
1
2# 安装包到默认路径
pip install package_name卸载包
1
2# 删除包
pip uninstall package_name查看已经安装的包
1
2
3
4# 列出所有包
pip list
# 查看指定包的详细信息
pip show --files package_name升级包
1
pip install --upgrade package_name
conda install 与 pip install 的核心区别
管理范围不同
- conda install :通用包管理器,能安装 Python 包、C/C++ 库、命令行工具、编译器(如 OpenSSL、CUDA 工具包)
- pip install :仅限 Python 包,只能安装 PyPI 仓库中的 Python 代码和模块
依赖解析方式不同
- conda install :安装前严格检查所有依赖,包括底层系统库的版本兼容性,解析全面,安装成功率高
- pip install :只检查 Python 包级别的依赖,不关心系统底层库(如动态链接库是否缺失),容易因环境不匹配导致安装失败
文件放置机制不同
conda install:中央缓存 + 硬链接- 中央缓存:包首先被下载并解压到一个统一的缓存目录(如
anaconda3/pkgs) - 硬链接:当在某个环境(如
myenv)中安装时,conda 会在这个环境的site-packages目录中创建指向缓存文件的“硬链接”- 这能节省磁盘空间并避免重复下载
- 中央缓存:包首先被下载并解压到一个统一的缓存目录(如
pip install:直接安装- 在当前激活的 Python 环境的
site-packages目录中直接放入包的实际文件 - 不使用 conda 的
pkgs缓存,也不被 conda 管理
- 在当前激活的 Python 环境的
- 总结
conda的安装路径是<anaconda3>/pkgs/(缓存) 和<anaconda3>/envs/<env_name>/lib/pythonX.X/site-packages/(硬链接)pip的安装路径是<anaconda3>/envs/<env_name>/lib/pythonX.X/site-packages/(实际文件)
- 注:
- 如果 pip 指向的是系统 Python,包会安装到系统的
site-packages - 若使用
--user选项,则会安装到用户目录 - 在当前 conda 虚拟环境下安装时,不管是 conda install 和 pip install 安装都是为当前虚拟环境范围对齐的
- 如果 pip 指向的是系统 Python,包会安装到系统的
元数据记录方式不同
- conda install :有独立数据库(
conda-meta目录),完整记录每个通过conda安装的包及其版本 - pip install :没有中央数据库,安装记录以
dist-info或egg-info元数据文件夹的形式直接存放在site-packages目录中
彼此感知与可管理性
- conda install 的包,
pip list会显示吗?- 会显示(如果是 Python 包,在
site-packages里有元数据,pip list扫描磁盘时能看到) - 但
pip只能“看见”,无法“管理”(不能卸载、不能升级)- 执行
pip uninstall会失败或残留文件
- 执行
- 会显示(如果是 Python 包,在
conda list能感知pip安装的包 :conda list会列出所有用pip和conda安装的包,且会区分两者的类型展示出来
特别注意:同名包互相覆盖(最危险的问题)
- 由于安装和管理机制不同,混用会带来以下风险:
- 依赖冲突 :
- 当 conda 后续尝试解决依赖时,可能会因为不了解 pip 安装的包而做出错误判断,导致版本冲突或环境损坏
- 覆盖与混乱 :
pip可能会用不同版本的文件覆盖 conda 已安装的包,导致环境状态不一致 - 卸载不彻底 :用
conda安装的包,若用pip卸载,可能只移除部分文件,留下“孤儿文件”
- 依赖冲突 :
- list 动作的效果,
conda list和pip list都可以同时展示出两个他们安装的所有包- 通过
conda list是可以同时列出包名和安装来源 - 通过
pip list仅列出报名,没有来源
- 通过
最佳实践(但我不使用)
一些规则(平时我们用的都不对):
- 1)优先使用
conda:尽可能先用conda install安装包 - 2)**
pip作为补充** :仅当包在 conda 源中不存在时,才使用pip install - 3)统一管理 :通过
conda list和pip list检查包,确保不被混用 - 4)使用
environment.yml:这是最稳健的做法。在文件中同时声明 conda 和 pip 的依赖,conda 会按顺序处理,确保环境一致性
- 1)优先使用
导入一个新环境的方式
配置文件构造:
1
2
3
4
5
6
7
8
9# environment.yml 示例
name: myenv
dependencies:
- python=3.9
- numpy # conda 安装
- pip # 必须包含 pip
- pip:
- requests # pip 安装
- click==8.0.0然后用以下命令创建环境:
1
conda env create -f environment.yml