ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Miniforge 替代 Anaconda:轻量级 Python 环境管理实战指南

Miniforge 替代 Anaconda:轻量级 Python 环境管理实战指南 1. 为什么我最终把 Anaconda 换成了 Miniforge1.1 从一次依赖冲突说起大概两年前我在一台新机器上配深度学习环境照例装了 Anaconda。装完之后跑一个很普通的图像处理脚本import cv2直接报错提示底层某个库版本对不上。我查了半天发现是 Anaconda 默认源里的包版本太旧和 conda-forge 上的新包混在一起依赖树直接乱掉了。那次折腾了整整一个下午最后靠删掉整个环境重来才解决。后来一个做科学计算的朋友跟我说你试试 Miniforge 吧默认就用 conda-forge 源包新、依赖干净而且没有 Anaconda 那一堆预装的商业包。我抱着试试看的心态装了一次从那以后我所有新机器上的 Python 环境管理都换成了 Miniforge。这篇文章就是把我这两年用 Miniforge 的经验完整地梳理一遍。Miniforge 是一个轻量级的 conda 发行版默认使用 conda-forge 作为软件源专门用来创建和管理 Python 虚拟环境。它能做的事情和 Anaconda 基本一样——装包、建环境、切环境、管理不同版本的 Python——但体积小得多依赖冲突也少得多。如果你正在被 Anaconda 的臃肿和依赖问题困扰或者你只是想要一个干净的 Python 环境管理工具那这篇内容应该能帮到你。不管你是刚接触 Python 的新手还是已经用过 conda 的老手我都会从安装讲到日常使用把踩过的坑一并说清楚。1.2 Miniforge、Miniconda、Anaconda 到底选哪个很多人第一次听到 Miniforge 会懵不是已经有 Miniconda 了吗怎么又冒出来一个我一开始也这么想。这三个东西本质上都是 conda 的发行版区别在于预装内容和默认源。对比项AnacondaMinicondaMiniforge安装包体积约 500MB-1GB约 50-100MB约 50-100MB预装包数量几百个极少极少默认软件源defaultsAnaconda 官方源defaultsconda-forge商业条款部分包有商用限制基本无完全开源适合人群完全新手、教学演示想自己控制环境的人追求干净环境和最新包的人Anaconda 的问题在于太重了。它预装了几百个包你大概率用不到其中 90%但它们会占空间、拖慢 conda 的依赖求解速度还可能和你后面自己装的包产生冲突。Miniconda 解决了体积问题但默认源还是 Anaconda 的 defaults 源包更新慢而且某些包在 defaults 和 conda-forge 之间混装时容易出问题。Miniforge 的关键差异就在默认源是 conda-forge。conda-forge 是一个社区维护的软件源包更新非常快覆盖面也广基本上你能想到的 Python 包上面都有。更重要的是当你所有包都来自同一个源时依赖求解器的工作会简单很多冲突概率大幅下降。这就是我前面说的那次cv2报错的根本原因——混源。提示如果你已经在用 Anaconda 且没遇到什么问题不必急着换。但如果你正准备配新环境或者被依赖冲突折磨过Miniforge 值得一试。1.3 这篇文章适合谁看我写这篇东西的时候脑子里想的是几类人。第一类是刚学 Python 的新手被装 Python 到底装哪个版本为什么装了包还是 import 不了这类问题卡住过。第二类是做数据科学或深度学习的需要频繁切换不同项目的环境比如一个项目要 PyTorch 配 CUDA 11.7另一个项目要 TensorFlow 配 CUDA 12。第三类是运维或者后端开发需要在服务器上批量部署 Python 环境希望工具轻量、可控、可脚本化。这三类人的共同需求其实是一样的要一个干净、可控、不容易出幺蛾子的 Python 环境管理方案。Miniforge 恰好满足这个需求。接下来的内容我会按安装—配置—日常使用—问题排查的顺序展开每一步都给出具体命令和背后的原因你可以直接照着做。2. 安装 Miniforge不同系统的完整操作2.1 Windows 下的安装步骤与注意事项Windows 上装 Miniforge 有两种方式下载安装包双击安装或者用命令行工具装。我推荐前者对新手更友好。先去 Miniforge 的官方发布页面下载对应你系统的安装包。Windows 用户选文件名里带Windows-x86_64的那个.exe文件。下载完成后双击运行安装向导会问你几个问题这里有几个关键选择安装路径默认会装到C:\Users\你的用户名\miniforge3。我建议改成C:\miniforge3这种不带空格和中文的路径。原因很简单很多工具链对路径里的空格和中文支持不好后面配环境变量或者跑脚本时容易出莫名其妙的错。是否添加到 PATH安装向导里有个选项问你要不要把 Miniforge 加到系统 PATH。新手建议勾选这样你在任意终端里都能直接用conda命令。但如果你机器上已经装了 Anaconda 或其他 conda千万别勾否则两个 conda 会打架。是否注册为默认 Python这个选项看个人需求。如果你主要用 conda 管理环境可以勾上如果你还用系统 Python 做别的事就别勾。装完之后打开开始菜单里的 Miniforge Prompt输入conda --version能打印出版本号就说明装好了。如果你更喜欢命令行安装也可以用 PowerShell 下载安装包后静默安装# 下载安装包版本号请以官网最新为准 Invoke-WebRequest -Uri https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Windows-x86_64.exe -OutFile Miniforge3.exe # 静默安装到指定目录 Start-Process -FilePath .\Miniforge3.exe -ArgumentList /S /DC:\miniforge3 -Wait注意Windows 上安装完成后如果你没勾选添加到 PATH那么conda命令只在 Miniforge Prompt 里可用。在普通 CMD 或 PowerShell 里用会提示找不到命令。这不是装坏了是设计如此。2.2 macOS 与 Linux 的安装流程macOS 和 Linux 的安装流程几乎一样都是下载 shell 脚本然后执行。区别只是下载的文件名不同。macOS 用户要注意芯片类型M 系列芯片M1/M2/M3选Miniforge3-MacOSX-arm64.shIntel 芯片选Miniforge3-MacOSX-x86_64.sh。Linux 用户一般选Miniforge3-Linux-x86_64.sh如果是 ARM 服务器就选aarch64版本。# 下载安装脚本以 Linux x86_64 为例 wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh # 赋予执行权限 chmod x Miniforge3-Linux-x86_64.sh # 执行安装 ./Miniforge3-Linux-x86_64.sh安装过程中会问你安装路径默认是~/miniforge3。我一般保持默认因为这是用户目录下的路径不需要 root 权限后面迁移也方便。安装脚本最后会问你要不要运行conda init选 yes。这一步很关键它会修改你的 shell 配置文件比如.bashrc或.zshrc把 conda 的初始化代码加进去这样你每次打开终端 conda 命令就自动可用了。装完之后关掉当前终端重新开一个输入conda --version验证。如果提示找不到命令说明conda init没生效可以手动执行# 假设你用的是 bash source ~/miniforge3/etc/profile.d/conda.sh conda init bash然后重新打开终端即可。2.3 安装后的第一件事验证与初始化不管哪个系统装完之后我都建议做三件事来确认环境正常。第一检查 conda 版本和默认源conda --version conda config --show channels正常情况下channels应该显示conda-forge排在第一位。如果显示的是defaults说明你装的可能是 Miniconda 而不是 Miniforge或者安装过程中源配置被改了。第二检查 Python 版本python --versionMiniforge 自带的 base 环境里会有一个 Python版本通常是较新的稳定版。这个 base 环境我建议不要用来做项目只用来管理其他环境。原因后面会讲。第三更新 conda 自身conda update -n base -c conda-forge conda这一步会从 conda-forge 拉取最新版的 conda。为什么要更新因为 conda 的依赖求解器一直在改进新版本求解更快、冲突更少。我实测下来新版 conda 装复杂环境比如 PyTorch CUDA的成功率明显比老版本高。提示conda init这个命令经常出现在报错信息里比如condaerror: run conda init before conda activate。这个报错的意思是你的 shell 还没被 conda 初始化按上面说的执行一次conda init然后重开终端就行。3. 核心配置换源、环境隔离与目录管理3.1 conda 换源为什么换、怎么换、换成什么先说一个很多人搞混的点Miniforge 默认已经用 conda-forge 了理论上不需要换源。但国内网络环境特殊直连 conda-forge 的官方服务器速度可能很慢甚至超时。这时候就需要把 conda-forge 的镜像地址配上去。我遇到过最典型的报错就是这个condahttperror: http 000 connection failed for url http://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/win-64/current_repodata.json这个报错的意思是 conda 尝试从某个镜像拉取包索引时连接失败了。原因可能是镜像地址失效、网络波动或者镜像本身没同步这个文件。解决办法有两个换一个可用的镜像或者临时用官方源。配置镜像的命令如下以清华镜像为例# 添加 conda-forge 的镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ # 设置显示 channel 地址方便排查 conda config --set show_channel_urls yes但这里有个坑如果你同时配了多个镜像源conda 会按顺序去每个源找包反而可能变慢或冲突。我的做法是只保留一个 conda-forge 镜像把其他都删掉# 查看当前所有 channel conda config --show channels # 删除不需要的 channel conda config --remove channels https://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/ # 或者直接重置 channels 配置 conda config --remove-key channels重置之后conda 会回到默认的 conda-forge 官方源。如果你网络能直连官方源其实这样最干净。注意换源之后如果还是报http 000错误先别急着怀疑配置。用浏览器或curl手动访问一下那个 URL看看镜像本身是不是挂了。镜像服务偶尔会维护换个镜像或者等一会儿再试就行。3.2 环境隔离为什么 base 环境不能乱用conda 最核心的价值就是环境隔离。你可以为每个项目建一个独立的环境每个环境有自己的 Python 版本和包互不干扰。这是解决这个项目要 numpy 1.20那个项目要 numpy 1.24这类问题的根本手段。但很多人包括我早期习惯直接在 base 环境里pip install各种包这是大忌。原因有三第一base 环境是 conda 自己运行的地方。你在里面装了乱七八糟的包可能和 conda 依赖的库冲突导致 conda 命令本身出问题。我见过有人把 base 环境的 Python 降级结果 conda 直接启动不了。第二base 环境一旦搞乱修复起来很麻烦。你可能需要重装整个 Miniforge。而普通环境搞乱了删掉重建就行几秒钟的事。第三环境隔离能让你清楚地知道每个项目依赖了什么。项目要迁移到另一台机器时导出环境配置就能复现不用猜。所以我的原则是base 环境只用来管理其他环境永远不在里面装项目依赖。3.3 环境目录迁移C 盘满了怎么办Windows 用户迟早会遇到这个问题conda 环境默认建在C:\Users\你的用户名\miniforge3\envs下面每个环境少则几百 MB多则几个 GB装几个深度学习环境 C 盘就红了。解决办法是修改 conda 的环境目录配置。有两种方式方式一修改.condarc配置文件。这个文件在 Windows 上位于C:\Users\你的用户名\.condarcLinux/macOS 在~/.condarc。加上这两行envs_dirs: - D:\conda_envs pkgs_dirs: - D:\conda_pkgsenvs_dirs是新环境存放的位置pkgs_dirs是包缓存的位置。改完之后新建的环境就会放到 D 盘。方式二用命令行配置conda config --add envs_dirs D:\conda_envs conda config --add pkgs_dirs D:\conda_pkgs已经建好的环境不会自动迁移需要手动移动文件夹然后修复环境里的路径记录。这个操作比较麻烦我一般建议直接删掉重建反正环境配置可以导出。提示迁移环境目录后如果conda activate报错说找不到环境检查一下.condarc里的路径是不是写对了Windows 下路径分隔符用反斜杠或双反斜杠都行但别用单反斜杠加特殊字符。4. 日常使用从建环境到装包的全流程4.1 创建和管理虚拟环境的标准操作建环境是 conda 最高频的操作。基本命令是conda create -n 环境名 python版本号比如热词里提到的conda create -n labels python3.9就是建一个叫labels的环境Python 版本指定 3.9。这里有几个经验点Python 版本怎么选不要盲目追新。很多库对最新版 Python 的支持会滞后几个月。比如你要用 PyTorch先去 PyTorch 官网看它支持哪个 Python 版本再决定。一般来说比最新版低一到两个小版本是最稳的。2024 年这个时间点3.10 和 3.11 是比较安全的选择。环境名怎么起用项目名或用途名别用test、env1这种。过两个月你根本记不住env1是干嘛的。我一般用项目名-py版本的格式比如crawler-py311、dl-torch-py310。建环境时还可以一次性装多个包conda create -n myenv python3.11 numpy pandas matplotlib jupyter这样建完环境包也装好了省一步。环境建好后的常用管理命令# 查看所有环境 conda env list # 激活环境 conda activate myenv # 退出环境 conda deactivate # 删除环境 conda remove -n myenv --all # 复制环境 conda create -n newenv --clone oldenvconda env list会列出所有环境当前激活的环境前面有个星号。这个命令我几乎每次开终端都会敲一下确认自己在哪个环境里。4.2 装包conda install 还是 pip install这是 conda 用户最纠结的问题之一。我的原则是能用 conda 装的就用 condaconda 没有的再用 pip。为什么因为 conda 不只是 Python 包管理器它还能管理非 Python 的依赖比如 CUDA、cuDNN、MKL 这些底层库。用 conda 装 PyTorch 时它会自动帮你把匹配的 CUDA 版本也装上省去手动配 CUDA 的麻烦。而 pip 只管 Python 包底层依赖要你自己搞定。conda 装包命令conda install numpy pandas conda install -c conda-forge some-package因为 Miniforge 默认就是 conda-forge所以-c conda-forge通常可以省略。pip 装包命令pip install some-package但要注意在 conda 环境里用 pip 时一定要确认 pip 是这个环境里的 pip。激活环境后执行which pipLinux/macOS或where pipWindows确认路径指向当前环境。如果指向 base 环境或其他地方装完的包会跑到别的环境去然后你就import不到白白排查半天。还有一个坑不要混用 conda 和 pip 装同一个包。比如先用 conda 装了 numpy又用 pip 装了一个不同版本的 numpy两个版本会打架import 时可能加载到错误的那个。如果非要混用先用 conda 装完所有能装的最后再用 pip 补漏。4.3 环境导出与复现让项目可迁移项目做完要迁移到另一台机器或者要分享给同事怎么保证环境一致答案是导出环境配置文件。# 导出环境到 yml 文件 conda env export -n myenv environment.yml # 从 yml 文件重建环境 conda env create -f environment.ymlconda env export会导出所有包的精确版本包括 conda 装的和 pip 装的。但有个问题它还会导出包的下载地址带 channel URL换一台机器或换一个镜像源时可能失效。我的做法是加--no-builds参数去掉平台相关的构建信息conda env export -n myenv --no-builds environment.yml这样导出的文件更通用跨平台复现成功率高。如果还不行可以手动编辑 yml 文件把prefix那一行删掉把 channel 地址改成通用的。对于纯 pip 项目也可以用pip freezepip freeze requirements.txt pip install -r requirements.txt但pip freeze只导出 pip 装的包conda 装的底层库不会包含在内。所以 conda 环境还是推荐用conda env export。5. 常见问题与排查技巧实录5.1 激活环境报错conda init 相关报错信息condaerror: run conda init before conda activate原因shell 没有被 conda 初始化conda activate这个命令在当前 shell 里不可用。解决conda init bash # 或 zsh、fish看你用哪个 shell然后关闭终端重新打开。Windows 上用 Miniforge Prompt 一般不会有这个问题因为安装时已经初始化过了。如果conda init之后还是不行检查一下 shell 配置文件里有没有 conda 的初始化代码。Linux/macOS 下看~/.bashrc或~/.zshrc应该有一段以# conda initialize 开头的内容。没有的话手动加上source ~/miniforge3/etc/profile.d/conda.sh5.2 网络相关报错HTTP 000 与连接超时报错信息condahttperror: http 000 connection failed for url ...原因conda 无法连接到配置的镜像源。可能是镜像挂了、网络不通、或者镜像地址写错了。排查步骤先用curl或浏览器访问报错里的 URL确认镜像本身是否可访问。如果镜像挂了换一个镜像或者临时用官方源。检查.condarc里的 channel 配置删掉失效的。如果所有镜像都不行可能是本地网络问题检查代理设置注意这里指的是正常的网络代理配置不是任何特殊工具。临时用官方源装包conda install -c conda-forge --override-channels some-package--override-channels会忽略.condarc里的配置直接用指定的源。5.3 依赖冲突版本求解失败的应对报错信息Solving environment: failed with initial frozen solve. Retrying with flexible solve.然后一堆PackageNotFoundError或UnsatisfiableError。原因你要装的包和现有环境里的包版本冲突conda 找不到满足所有约束的组合。解决思路第一新建一个干净环境装别在旧环境里硬解。这是最有效的办法。第二放宽版本约束。比如python3.11.5改成python3.11让 conda 有更多选择空间。第三用conda install时加--no-deps跳过依赖检查慎用可能导致运行时缺依赖。第四用 mamba 替代 conda 的求解器。mamba 是一个用 C 重写的 conda 前端求解速度快很多冲突处理也更好。Miniforge 从某个版本开始已经内置了 mamba可以直接用mamba install some-package我实测下来同样的环境mamba 求解时间大概是 conda 的十分之一而且成功率更高。强烈推荐。5.4 常见问题速查表问题现象可能原因解决方法conda: command not found未初始化 shell 或未加 PATH执行conda init或手动 sourceconda activate报错shell 未初始化conda init后重开终端http 000连接失败镜像失效或网络问题换镜像或临时用官方源依赖求解失败版本冲突新建环境、放宽约束、用 mambapip 装的包 import 不到pip 指向了错误环境检查which pip用python -m pipC 盘空间不足环境默认建在 C 盘修改envs_dirs到其他盘环境删不掉有进程占用关掉相关终端和程序再删装完包 conda 变慢包缓存太大conda clean -a清理缓存5.5 几个我踩过的坑和独家技巧坑一在 base 环境里 pip install。我早期图省事直接在 base 里装了一堆包后来 conda 升级时依赖冲突conda 命令直接挂了。最后只能重装 Miniforge。从那以后我严格遵守base 只管理不装包的原则。坑二混用 conda 和 pip 装同一个包。有次我先用 conda 装了 numpy后来某个库依赖特定版本的 numpy我用 pip 又装了一个结果 import numpy 时加载的是 pip 那个和 conda 装的 scipy 不兼容跑起来各种诡异报错。排查了很久才想到是版本混装。坑三环境名用中文或特殊字符。有次建了个叫测试环境的环境激活时各种转义问题后来改成英文就好了。环境名、路径都建议用纯英文加数字和下划线。技巧一用conda clean -a定期清理缓存。conda 下载的包会缓存在pkgs_dirs里时间长了能占几十 GB。定期清理能释放空间也能避免缓存损坏导致的安装失败。技巧二用python -m pip代替pip。这样能确保 pip 是当前 Python 解释器对应的那个避免装错环境。这是个很小的习惯但能省很多排查时间。技巧三给常用环境建快捷激活脚本。比如我在.bashrc里加了个别名alias act-dlconda activate dl-torch-py310敲act-dl就能激活深度学习环境比敲全名快多了。技巧四装 CUDA 相关包时先查官方命令。PyTorch、TensorFlow 官网都有针对不同 CUDA 版本的安装命令生成器直接复制粘贴别自己猜版本组合。比如conda install pytorch torchvision torchaudio pytorch-cuda11.7 -c pytorch -c nvidia这种官网生成的最靠谱。6. 和其他工具的配合使用6.1 在 VS Code 和 PyCharm 里配置 Miniforge 环境Miniforge 建好的环境在 IDE 里怎么用这是很多人装完之后的第一个问题。VS Code打开命令面板CtrlShiftP输入 Python: Select Interpreter然后选择你的 conda 环境对应的 Python 解释器。路径一般在环境目录/envs/环境名/python.exeWindows或环境目录/envs/环境名/bin/pythonLinux/macOS。如果列表里没有手动输入路径添加。VS Code 有个小坑如果你在终端里激活了 conda 环境但 VS Code 的 Python 解释器还是指向 base那运行代码时用的还是 base 的 Python。所以一定要在右下角确认当前解释器是你要的那个环境。PyCharm打开 Settings → Project → Python Interpreter点齿轮图标选 Add然后选 Conda Environment指定 conda 可执行文件路径和环境路径。PyCharm 会自动识别 conda 环境列表。提示PyCharm 配置 conda 环境时如果提示找不到 conda检查一下 conda 可执行文件的路径。Windows 上一般在C:\miniforge3\Scripts\conda.exeLinux/macOS 在~/miniforge3/bin/conda。6.2 在 WSL 里使用 MiniforgeWSLWindows Subsystem for Linux里用 Miniforge 和在原生 Linux 里一样按前面的 Linux 安装步骤操作即可。但有个常见需求在 Windows 的 PyCharm 或 VS Code 里使用 WSL 里的 conda 环境。VS Code 的话装个 WSL 扩展然后在 WSL 里打开项目文件夹VS Code 会自动识别 WSL 里的 Python 环境。PyCharm 的话在解释器配置里选 WSL然后指定 WSL 里的 conda 路径。这个配置稍微麻烦一点但配好之后体验很好——Windows 的图形界面加 Linux 的开发环境两全其美。6.3 用 Miniforge 管理非 Python 工具conda 不只管 Python 包还能装很多命令行工具。比如conda install -c conda-forge git conda install -c conda-forge nodejs conda install -c conda-forge ffmpeg这样装的好处是这些工具被隔离在环境里不会污染系统。比如你某个项目需要特定版本的 ffmpeg用 conda 装在项目环境里不影响系统里的其他版本。但要注意不是所有工具在 conda-forge 上都有而且有些工具的 conda 版本可能比官方版本旧。对于 git、node 这类更新频繁的工具我一般还是用系统包管理器或官方安装方式。conda 装工具更适合那些和 Python 生态紧密相关的比如 ffmpeg、openblas 这些。7. 一些个人体会用了两年 Miniforge最大的感受是省心。以前用 Anaconda 时每次配新环境都要祈祷别出依赖冲突现在用 Miniforge 加 mamba建环境基本一次成功。base 环境保持干净所有项目环境独立删了重建也就几十秒的事心理负担小了很多。如果你现在还在用 Anaconda 且经常遇到问题我的建议是别急着卸载先装一个 Miniforge 并行用一段时间把新项目都建在 Miniforge 里感受一下差异。确认没问题了再把 Anaconda 卸掉。这样过渡最稳妥不会因为环境切换影响正在进行的项目。最后分享一个小习惯我每个项目的根目录下都会放一个environment.yml项目做完就更新一次。这样不管过多久想重新跑这个项目conda env create -f environment.yml一条命令就能复现环境。这个习惯帮我省了无数次这个项目当时用的什么版本的回忆时间。
返回列表