全部文章

0-Anaconda:环境和包管理

安装Python之后,就相当于我们买了辆裸车,Anaconda就是改装后的Python“兰博基尼”,集成了很多现成的好用的工具。其实Anaconda就是预装了很多包的python。

Anaconda是什么?

Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。

Anaconda利用工具/命令conda来进行package和environment的管理,并且已经包含了Python和相关的配套工具

下载

https://www.anaconda.com/download/

 安装

 双击exe

安装完成之后,我们打开开始按钮,会发现如下程序:

 

Anaconda Navigator:用于管理工具包和环境的图形用户界面,后续涉及的众多管理命令也可以在 Navigator 中手工实现

Jupyter notebook:基于web的交互式计算环境,可以编辑易于人们阅读的文档,用于展示数据分析的过程

qtconsole:一个可执行 IPython 的仿终端图形界面程序,相比 Python Shell 界面,qtconsole 可以直接显示代码生成的图形,实现多行代码输入执行,以及内置许多有用的功能和函数。

spyder:一个使用Python语言、跨平台的、科学运算集成开发环境。

优点

省时省心、分析利器。

官方文档

https://docs.conda.io/en/latest/

常用命令

在不指定 Conda 环境的情况下,conda 命令 ​​仅作用于当前激活的环境中。若未激活任何环境​​:Conda命令 默认作用于 base(即根环境)中。

conda新一版本命令规律:如果使用全称,就要使用两个“--”,如果使用简称,就要使用一个“-”,例如:

conda create -n newenv python=3.12

#等价写法
conda create --name newenv python=3.12

环境管理命令

注意,如果要设置环境所在的路径,请在conda创建环境之前,在配置文件“.condarc”里添加:envs_dirs 属性:

conda config --add envs_dirs D:\conda_envs

# 创建环境
conda create -n myenv python=3.9
# 例如:
conda create -n myenvironment python numpy pandas
# 激活环境
conda activate myenv
# 切换回默认环境base:
conda activate
# 退出环境
conda deactivate
# 删除环境
conda env remove -n myenv
# 查看所有环境,正在活动环境是带有星号 (*) 的环境,方法1:
 conda env list
# 要查看所有环境的列表,方法2
conda info --envs
conda info -e

包管理命令

# 搜索可用的包
conda search $SEARCH_TERM
# 列出已安装的软件包
conda list --name $ENVIRONMENT_NAME
# 查看python安装包
conda list python --name base#(即根环境)中安装包。
# 安装包
conda install $PACKAGE_NAME
# 在指定环境安装相关库
conda activate myenvironment
conda install matplotlib
# 在指定环境安装相关库
conda install --name myenvironment matplotlib
# 从特定源安装包
conda install --channel $URL $PACKAGE_NAME
# 更新包
conda update --name $ENVIRONMENT_NAME $PACKAGE_NAME
# 更新包管理器
conda update conda
# 卸载软件包
conda remove --name $ENVIRONMENT_NAME $PACKAGE_NAME
conda remove --name myenvironment  python scipy
# 安装 Python
conda install python=x.x
# 更新 Python:更新到该系列中的最新版本,因此任何 Python 2.x 都会更新到最新的 2.x,任何 Python 3.x 都会更新到最新的 3.x。
conda update python

更新conda命令

#查看 conda 版本
conda --version
#将 conda 更新到最新版本:
conda update conda

频道(源)

由于python各种版本库非常多并且复杂,且版本依赖很严重,所以就有了“频道”,意思就是我们都在同一个频道上,肯定不会有错,例如我们做科学计算,使用到numpy,pandas,matplotlib等库,每个库都有很多版本,但是numpy1.0可能和pandas1.2以及matplotlib1.3是“一套”适配版本,但是我们肯定不知道也记不住这麽多版本号,那怎么办?就用频道来解决,conda里面的默认频道“conda-forge”里面就会自动给我们搭配好各种已经验证过的“配方”,各种库直接都是适配的,我们不需要关心版本号,除非有特殊特殊的要求。

 

当然,由于conda里面的默认频道“conda-forge”地址在海外,所以我们在下载安装库的时候会比较慢,于是就有了国内的各种镜像频道(镜像源),例如,清华以及阿里等等镜像源。我们可以在.condarc文件里面进行源配置。也可以通过命令配置。我们一一讲解

.condarc配置文件

有多个 .condarc 文件?​​

Conda 在运行时 ​​按优先级加载多个路径的配置文件​​,这是正常现象。以下是具体原因和影响:


多个Conda 配置文件加载顺序​​

Conda 会依次从以下位置读取 .condarc(优先级从高到低):

  1. ​​当前环境路径​​(如 D:\install\tools\Anaconda312\envs\your_env\.condarc
    • 仅对特定环境生效。
  2. ​​用户主目录​​(如 C:\Users\luzhanshi\.condarc
    • 对当前用户的所有 Conda 操作生效。
  3. ​​Anaconda 根目录​​(如 D:\install\tools\Anaconda312\.condarc
    • 对所有使用该 Anaconda 实例的用户生效。
潜在问题​​
  • ​​配置冲突​​:例如,用户主目录和 Anaconda 根目录的 channels 列表不一致,可能导致依赖解析混乱。
  • ​​镜像源失效​​:如果两个文件定义了不同的镜像源(如清华源和官方源),可能引发下载速度或兼容性问题。

如何管理多个 .condarc 文件?​​

保留用户主目录的配置​​,删除或注释掉 Anaconda 根目录的 .condarc

del D:\install\tools\Anaconda312\.condarc
使用命令修改配置(避免手动编辑)​
# 添加清华镜像源(用户主目录生效)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels conda-forge
# 设置频道优先级为 flexible
conda config --set channel_priority flexible
 默认配置文件优先级总结​​
配置文件位置 作用范围 优先级
当前环境/.condarc 仅当前环境 最高
用户主目录/.condarc 当前用户所有操作
Anaconda根目录/.condarc 所有用户
系统级路径(如/etc/.condarc) 所有用户 最低
特殊情况​​
  • ​​环境隔离需求​​:如果某个项目需要独立配置(如私有镜像源),可在项目(环境)目录下创建 .condarc,仅对该环境的操作生效。
  • ​​多用户服务器​​:管理员通常在 Anaconda 根目录配置公共镜像源,用户可在自己的目录覆盖配置。

配置文件配置项说明

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/  # 清华镜像源(免费包)
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/  # 清华镜像源(主包)
  - conda-forge                                               # 社区维护包
  - defaults                                                  # 官方默认源(可选)(实际指向 repo.anaconda.com/pkgs/main)
  - https://repo.anaconda.com/pkgs/main                       # 官方主包源(与 defaults 重复)
  - https://repo.anaconda.com/pkgs/r                          # R 语言相关包
  - https://repo.anaconda.com/pkgs/msys2                      # Windows 系统工具包
#channel_priority:频道优先级模式​
channel_priority: strict                                      # 严格按频道顺序解析依赖;strict:仅在高优先级频道中查找所有依赖包,若找不到则失败。flexible:允许跨频道解析依赖(推荐用于多频道环境)。若设置为 strict,混合镜像源和官方源时易引发依赖不兼容。

ssl_verify: true                             # 启用 SSL 验证(默认)
  • ​​作用​​:按顺序指定 Conda 搜索包的频道,优先级从上到下递减。
  • ​​问题​​:
    • 上面配置文件defaults 和 https://repo.anaconda.com/pkgs/main 重复。
channel_priority
    • strict 的冲突本质​​:
      它要求​​所有依赖必须来自同一优先级的频道​​,如果该频道的包版本无法形成完整依赖链(即使其他频道有兼容版本),就会失败。

    • ​​flexible 的风险本质​​:
      它允许跨频道组合依赖,但不同频道的包可能因编译环境差异(如 Linux 系统库版本)导致运行时崩溃。例如,从镜像源安装 PyTorch(CUDA 11.3 编译),从官方源安装 TensorFlow(CUDA 11.6 编译),混合使用可能引发 CUDA 错误。

如何选择?​​

​​场景​​ ​​推荐模式​​ ​​原因​​
使用单一可信源(如仅官方源或仅镜像源) strict 确保依赖全部来自同一来源,避免隐式兼容问题。
混合多频道(如镜像+官方) flexible 允许跨频道解析,但需人工审核关键包(如深度学习框架、CUDA 相关)的来源一致性。
需要最大兼容性(旧项目维护) disabled¹ 关闭优先级,完全依赖 Conda 的依赖求解器,可能找到更多解但风险最高。

¹ disabled 是更宽松的模式(Conda 早期默认),允许任意混合频道,​​慎用​​。

最佳实践​​

  1. ​​优先使用单一频道​​:通过 conda config --add channels 设置唯一源(如清华镜像),避免混合。
  2. ​​必要时混合频道​​:若必须混合,使用 flexible 但手动指定关键包的频道,例如:
    conda install -c defaults pytorch -c mirror numpy

最终建议配置文件内容

channel_priority: flexible
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - conda-forge

显式指定频道

在某些情况下,我们安装较新版本的库时,会遇到错误,因为一些镜像源的同步并没有那么及时,例如:

conda create -n numpy_pandas_matplotlib python=3.12 numpy pandas matplotlib
    1. ​​频道优先级冲突​​:
      你的 .condarc 配置中设置了 channel_priority: strict,这会强制 Conda ​​仅在最高优先级的频道中查找所有依赖​​。
      由于 anaconda/pkgs/main 频道中 python=3.13 的依赖链不完整(例如缺少兼容的 numpypandas 等包),导致依赖解析失败。

    2. ​​包兼容性问题​​:
      Python 3.13 目前处于 ​​预发布阶段​​,许多科学计算包(如 numpypandas)尚未提供适配版本,导致无法构建完整环境。

解决办法:强制指定频道(源)

conda create -n numpy_pandas_matplotlib -c conda-forge python=3.12 numpy pandas matplotlib

 说明​​:conda-forge 通常更快适配新版本 Python。

环境使用说明

1.在指定环境运行jupyter

假设我们要学习pandas,我们可以按照以下步骤来进行,首先打开cmd窗口,然后输入以下命令

#创建环境并安装相关库
conda create -n pandas_learn python numpy pandas

#启动改环境 conda activate pandas_learn #在此环境下打开jupyter notebook jupyter notebook

2.从 base 环境启动但使用其他环境内核​​

  • ​​操作场景​​:
    如果希望从 base 启动 Jupyter Notebook,但选择 myenv 环境的内核执行代码。
  • ​​操作步骤​​
# 在 myenv 中安装 ipykernel
conda activate myenv
conda install ipykernel

# 将 myenv 注册为 Jupyter 内核(仅需一次)
python -m ipykernel install --user --name myenv --display-name "MyEnv"

# 回到 base 环境启动 Jupyter Notebook
conda activate base
jupyter notebook

在 Jupyter 中选择内核​​:
新建 Notebook 时,通过菜单 ​​Kernel → Change kernel → MyEnv​​ 切换到 myenv 环境。


​​3. 最佳实践​​

场景 推荐方法
长期使用单一环境处理数据 直接在目标环境中安装并启动 Jupyter Notebook(无需切换内核)
需要跨多个环境调试代码 注册各环境为 Jupyter 内核,从 base 统一启动 Notebook,按需切换内核
避免环境冲突 为每个项目创建独立环境,并通过 ipykernel 管理内核

 

4. 补充技巧​​--后台启动

正常情况下,我们使用cmd启动jupyter之后,我们电脑的cmd窗口必须一直处于打开状态,因为关闭cmd窗口,jupyter服务就会停止:

 解决方案

    • ​​后台运行 Jupyter Notebook​​:
      使用 nohup(Linux/macOS)或 start(Windows)命令让进程脱离终端
# Windows
start jupyter notebook

# Linux/macOS
nohup jupyter notebook &

终止 Jupyter 进程​​:
若终端已关闭,可通过任务管理器(Windows)或 kill 命令(Linux/macOS)结束进程。

 anaconda的替代方案

  • ​​曾是主流​​:Anaconda 因其预装科学计算库和环境管理功能,​​曾是数据科学领域的首选工具​​。
  • ​​现状变化​​:随着轻量化工具和替代品的崛起,Anaconda 的“全家桶”模式因 ​​体积庞大、启动慢、依赖复杂​​ 逐渐被部分开发者放弃。

在环境管理领域,Anaconda 确实是流行的选择之一(尤其在数据科学领域),但它并非唯一选择,其性能问题也常被用户诟病。以下是详细分析和替代方案建议:


一、Anaconda 速度慢的可能原因

  1. 图形界面开销
    Anaconda Navigator 的 GUI 界面依赖大量前端库(如 Electron 或 Qt),启动时需要加载额外资源,而命令行直接调用 jupyter notebook 跳过了这些开销,因此更快。

  2. 预装包过多
    Anaconda 默认安装数百个科学计算包(如 NumPy、Pandas 等),占用磁盘空间和内存,可能拖慢整体性能。

  3. Conda 解析依赖较慢
    Conda 的依赖解析算法在处理复杂环境时可能较慢,尤其当频道(channels)和包版本冲突时。


二、Anaconda 的轻量替代品

以下是更轻量、高效的环境管理工具:

1. Miniconda

  • 特点:Anaconda 的极简版,仅包含 Conda、Python 和基础依赖,用户按需安装包。

  • 优势:减少预装包,体积更小(~100MB vs Anaconda 的 ~3GB),性能更优。

  • 适用场景:需要 Conda 生态但希望轻量化的用户。

2. Mamba

  • 特点:Conda 的 C++ 加速替代品,完全兼容 Conda 命令,依赖解析速度提升 10-100 倍。

  • 优势:直接替换 Conda,例如 mamba install numpy

  • 适用场景:频繁创建/更新环境的重度 Conda 用户。

  • 安装
    conda install -n base -c conda-forge mamba
    mamba install numpy pandas  # 替代 conda install

3. venv / virtualenv(Python 原生工具)

  • 特点:Python 内置的虚拟环境工具(venv)或更灵活的第三方工具(virtualenv)。

  • 优势:轻量、无需安装额外工具,适合纯 Python 项目。

  • 缺点:无法管理非 Python 依赖(如 C 库)。

  • 使用:
    python -m venv myenv
    source myenv/bin/activate  # Linux/macOS
    myenv\Scripts\activate    # Windows
    pip install jupyter pandas

4.Poetry

  • 特点:结合 pip 和虚拟环境,提供依赖锁定(Pipfile.lock/poetry.lock)。依赖管理与打包一体化​​,精准解决版本冲突。

  • 优势:适合纯 Python 应用,依赖管理更规范化。

  • 适用场景:Python 库开发或需要严格版本控制的项目。

  • 缺点:不适用于需要跨语言依赖(如 R 或 C++ 库)的场景。

  • 使用
    pip install poetry
    poetry new myproject
    poetry add numpy

5. Docker

  • 特点:通过容器化实现环境隔离,确保跨平台一致性。容器化环境隔离​​,避免污染宿主机。

  • 优势:彻底隔离环境,适合复杂依赖或生产部署。

  • 缺点:学习成本高,资源占用较大。

  • 使用
FROM python:3.9-slim
RUN pip install jupyter pandas
CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--allow-root"]

6.云 Notebook 服务​​

  • ​​Google Colab​​:免安装,直接使用 GPU,适合临时实验。
  • ​​JupyterLab on Cloud​​:如 AWS SageMaker、Deepnote。

三、工具对比与推荐

工具 包管理 跨语言支持 速度 学习成本 适用场景
Anaconda Conda 数据科学新手
Miniconda Conda 需 Conda 但希望轻量化
Mamba Conda 频繁操作 Conda 环境的用户
venv pip 纯 Python 简单项目
Poetry pip Python 项目规范化管理
Docker 任意 复杂依赖或生产环境

 

工具 优势 劣势 推荐场景
​​Miniconda​​ 轻量灵活,兼容 Conda 生态 依赖解析仍较慢 需 Conda 但不想用 Anaconda
​​Mamba​​ 极速依赖解析,兼容 Conda 社区资源略少 复杂环境快速搭建
​​venv + pip​​ 零额外依赖,Python 原生支持 依赖冲突需手动解决 简单项目或纯 Python 开发
​​Poetry​​ 精准依赖管理,适合打包发布 学习曲线较陡 开发 Python 库或严格版本控制
​​Docker​​ 完全隔离,跨平台一致性 资源占用高,启动较慢 生产环境或复杂依赖隔离

 


四、建议方案

  1. 日常数据科学开发
    使用 Miniconda + Mamba,保留 Conda 生态的同时大幅提升速度。

  2. 纯 Python 项目
    使用 Poetry 或 venv,简化依赖管理。

  3. 企业级或复杂环境
    使用 Docker 确保环境一致性。


五、加速 Anaconda 的额外技巧

  • 清理缓存:conda clean --all

  • 使用国内镜像源(如清华、中科大源)。

  • 避免频繁添加频道(减少依赖冲突)。

通过选择合适的工具和优化配置,可以显著提升环境管理效率。

​​换国内镜像源​​:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set channel_priority strict

使用 Mamba 加速​​:

mamba install numpy pandas jupyter

精简环境​​:避免安装非必要包。

5. 总结​​

  • ​​弃用 Anaconda 的场景​​:追求轻量、快速启动、简单项目管理。
  • ​​坚持 Anaconda 的场景​​:需要开箱即用的科学计算库(如 NumPy、SciPy)或跨平台兼容性。

 

​​推荐选择​​:

  • ​​日常数据分析​​:Miniconda + Mamba + 国内镜像。
  • ​​开发 Python 库​​:Poetry 或 venv + pip。
  • ​​深度学习与生产部署​​:Docker 或云服务。

 

 

 

 

 

 

 

 

 

posted @ 2025-03-05 20:01  指尖下的世界  阅读(218)  评论(0)    收藏  举报