Hexo

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

Anaconda——Python环境和pip包安装方式

文本适用于anaconda,miniforge等包含conda的所有软件

conda对Python虚拟环境的管理方式

  • 虚拟环境均存储在./envs目录下,按照虚拟环境名称命名
  • 在不同虚拟环境下,conda会切换到当前envs目录,从而实现访问不同Python和pip

pip包的管理方式

  • pip对包默认存储在当前虚拟环境下的lib目录下与Python版本有关,比如,lib/python3.10/site-package
  • 具体包的安装路径可使用pip show [package_name]判断
  • pip是一个脚本文件,可以使用vim打开,第一行指定了当前pip对应的Python脚本位置,需要设置准确,第一行必须与当前环境下执行which python的结果一致,如果有问题可以修改到指定目录(特别是手动迁移conda管理的虚拟环境时)

如何迁移Python虚拟环境?

  • 迁移虚拟环境只需要copy envs文件下下的指定环境目录即可,迁移后记得修改pip/pip3文件对应的第一行路径

Anaconda——conda和pip管理包的区别


管理包命令示例

  • 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 管理
  • 总结
    • 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 安装都是为当前虚拟环境范围对齐的

元数据记录方式不同

  • 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 会失败或残留文件
  • 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
      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
1…341342343…352
San Ye

San Ye

Stay Hungry. Stay Foolish.

704 posts
53 tags
© 2026 San Ye
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4