尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Conda 环境管理全指南:从安装、换源到报错排查

Conda 环境管理全指南:从安装、换源到报错排查 只用一句“装完 Python 就完事了”大概率会在第三个项目上翻车。真正让 conda 出圈的不是它能装包而是它把“环境、解释器、二进制依赖、CUDA 版本”这四件原本互相纠缠的事塞进了一个可以随时创建、随时删除、随时复制的盒子里。我这些年换过三台开发机、从 Windows 折腾到 Ubuntu最省时间的习惯只有一个任何一个新项目先建一个独立的 conda 环境再动手写代码。这篇文章面向的是刚接触 conda 的新手也面向那些用了两三年却始终靠“玄学重装”解决问题的朋友——从安装选择、命令用法、换源、IDE 配置到conda init报错、conda 不是内部或外部命令、WinError 1114这类让人抓头的坑我会把每一步为什么这么做讲清楚把能直接抄的命令给全。1. conda 到底解决了什么问题值不值得学1.1 从一次典型的依赖冲突说起假设你手上同时有两个项目。项目 A 是两年前的老代码依赖numpy1.21、pytorch1.8还绑定了一个 CUDA 11.1 的编译版本项目 B 是刚接手的新仓库要求numpy1.26、torch2.2。如果把这两个项目装在同一套全局 Python 里结果必然是二选一装了 A 的版本B 报AttributeError或者ImportError装了 B 的版本A 直接跑不起来。更麻烦的是Python 本身还有版本差异A 的代码可能只兼容 3.8B 用的新语法只支持 3.10 以上。这就是业内常说的“依赖地狱”。它不是因为开发者不够细心而是因为全局解释器本质上是一个共享资源池所有项目往里面扔东西谁都不能保证别人不踩到自己。conda 的核心价值就在这儿它允许你为每个项目建一个完全独立的目录里面有自己的 Python 解释器、自己的 site-packages、自己的依赖清单。环境之间互不可见删掉一个环境不会影响另一个。你可以理解成给每个项目发一套独立的房子而不是让所有人挤在一个公共宿舍里抢插座。除了隔离conda 的第二个优势是它管的不只是 Python 包。像numpy、scipy、pytorch这类库底层其实依赖大量 C、C、Fortran 编译出来的二进制文件甚至依赖 BLAS、LAPACK、MKL 这类数学库。pip 只能管 Python 层面的包遇到这种“包外面还有包”的情况经常束手无策conda 把它当作一个完整的软件包来处理连底层的动态链接库一起给你装好。这是它在科学计算和深度学习圈子里流行起来的根本原因。1.2 conda、pip、venv 三者的分工与边界新手最容易搞混的就是这三个东西。它们不是竞争关系而是层次不同。我用一张表把它讲透。维度condapipvenv管理对象Python 包 非 Python 二进制依赖主要管理 Python 包只负责创建隔离的 Python 环境环境隔离原生支持跨语言不负责原生支持但只隔离 Python 层Python 版本切换支持环境内可指定任意版本不支持不支持依赖外部已有的解释器依赖求解自带 SAT 求解器新版用 libmamba简单的版本约束冲突时易装出坏环境无二进制兼容处理得较好尤其是科学计算库依赖 wheel 是否齐全无典型使用场景数据科学、深度学习、多语言项目纯 Python 应用、发布包轻量级纯 Python 隔离需要强调一点conda 和 pip 不是互斥的。很多场景下正确做法是“conda 装环境和大件二进制库pip 装那些 conda 源里没有的小包”。这个顺序有讲究——先用 conda 装再用 pip 装。反过来操作conda 的依赖求解器会把 pip 装的东西当作未知状态轻则报冲突重则把环境和底层库搞乱。提示在一个环境里混用 conda 和 pip 时尽量让 pip 靠后执行并且装完之后不要再用conda install去动同一批包。这是我自己踩了很多次才总结出的规矩。1.3 哪些人真的需要 conda哪些人不必如果你是做深度学习、数据分析、生物信息、气象计算这类方向的conda 基本是标配因为它能帮你把 GPU 相关的一整套依赖一次性理顺。如果你只是写一个纯 Python 的 Web 服务依赖全是纯 Python 包那python -m venv或者更现代的uv、poetry完全够用犯不上为它多装几百兆的东西。还有一类人很适合 conda需要频繁切换 Python 版本的人比如要给不同客户维护不同版本的项目或者要复现别人论文里的环境。conda 一行命令就能创建指定 Python 版本的环境这是 venv 做不到的。判断标准很简单——只要你遇到过“这个项目跑不了那个项目能跑”的情况超过两次就该上 conda 了。2. 安装 condaWindows 与 Ubuntu 两条路线2.1 先选发行版Anaconda、Miniconda、Miniforge 怎么挑这三个名字经常把人绕晕其实区别很直接。Anaconda完整发行版预装了 numpy、pandas、jupyter、scikit-learn 等几百个包安装包三四个 G装完好几个 G。省事但体积大而且预装包的版本你未必需要。Miniconda只包含 conda 和一个基础 Python装完几百兆。后面装什么由你自己决定。绝大多数开发者的正确选择。Miniforge本质是 Miniconda 的变体默认使用 conda-forge 频道不依赖默认频道。适合对频道来源有明确偏好、希望环境更干净的人。我自己的做法是开发机装 Miniconda服务器上装 Miniforge。Anaconda 只在需要开箱即用做教学演示时用。选 Miniconda 的理由是它足够干净环境里有什么包一目了然出问题也容易定位。2.2 Windows 安装的实操步骤与三个关键选项从官网下载 Miniconda 的 Windows 安装包注意选对架构现在基本都是 64 位。安装过程中有三个选项值得停一下第一个是安装路径。默认会装到C:\Users\你的用户名\miniconda3。如果 C 盘空间紧张建议改到 D 盘比如D:\miniconda3。但路径里绝对不要出现中文、空格和特殊符号这是很多奇葩报错的根源。第二个是“Add Miniconda3 to my PATH environment variable”。官方默认不勾理由是可能影响系统里其他的 Python。但对新手来说不勾就意味着只能在开始菜单里的 Anaconda Prompt 里敲 conda 命令装完打开 CMD 输入conda会直接报“不是内部或外部命令”。我的建议是如果你机器上只有这一套 Python可以勾如果已经装了官方 Python就别勾用 Anaconda Prompt 更省心。后面我会讲不勾的情况下怎么手动配 PATH。第三个是“Register Miniconda3 as my default Python”。勾上之后双击.py文件默认用 conda 的 Python 打开。对纯新手友好对多环境用户没意义。装完之后怎么验证打开 Anaconda Prompt依次执行conda --version conda info第一条能打印出版本号第二条能看到 base 环境路径、channel 列表、平台信息就说明装好了。如果第二条里的base environment路径和你想的不一样说明系统里存在多套 conda需要清理 PATH 顺序。2.3 Ubuntu 下安装脚本方式更可控Ubuntu 上有两种装法一种是用 apt一种是用官方脚本。我不建议用 apt 装因为版本通常偏旧而且和你后面手动装的出现冲突时不好排查。用脚本更干净。先下载安装脚本。如果你网络条件一般可以先看看镜像站点有没有对应的安装包速度会明显好一些。下载完执行bash Miniconda3-latest-Linux-x86_64.sh安装过程会问你三个问题是否接受许可、安装到哪个目录、是否运行conda init。第一个输 yes第二个建议用$HOME/miniconda3第三个一定要输 yes——这一步就是替你把 shell 初始化脚本写好否则装完你会发现每次新开终端 conda 命令都找不到。装完执行source ~/.bashrc如果你用的是 zsh就是source ~/.zshrc再敲conda --version验证。如果提示conda: command not found说明初始化脚本没生效这时候手动执行一次~/miniconda3/bin/conda init bash source ~/.bashrc还有一种常见情况你在服务器上装完退出登录再进来conda 又消失了。这通常是因为你的 shell 配置被别的东西覆盖了或者你用的是非交互式 shell。解决办法是把 conda 的初始化块放到更靠后的位置或者在做自动化任务时手动 source conda 的 profile 脚本。2.4 装完必须做的三件事第一件事检查 base 环境要不要自动激活。新版 conda 默认不自动激活 base这样开机更快也不会污染系统命令。如果你习惯了进去就有环境可以执行conda config --set auto_activate_base true。我个人建议保持默认关闭用到的时候再 activate能少很多“为什么我的 python 指向 conda”的困惑。第二件事配置国内镜像源。后面第 3 章会详细讲这里只需要知道一件事装完之后立刻换源能省下大量等待时间。第三件事确认 conda 的配置文件位置。执行conda config --show-sources它会告诉你当前生效的.condarc在哪里。以后所有换源、重置源的操作都是围绕这个文件展开的。3. 环境与包管理把 conda 命令真正用起来3.1 环境生命周期创建、切换、退出、删除conda 的命令其实不多把环境的生命周期搞清楚日常就够用了。创建一个指定 Python 版本的环境conda create -n labels python3.9-n后面跟环境名。名字建议用项目名或者项目名加简写别用test1、test2这种过一周你自己都不知道哪个是哪个。命令回车后会列出将要安装的包确认后输 y。创建时顺手装几个常用包也行conda create -n nlp python3.10 numpy pandas jupyterlab -y-y表示自动确认省一次交互。激活环境conda activate labels激活成功后命令行提示符前面会出现(labels)。这是最直观的判断方式。想退出就conda deactivate。想看看现在有哪些环境用conda env list或者conda info --envs前面带星号的就是当前环境。删除环境要特别注意两点。第一必须先退出该环境再删否则会报错。第二删之前想清楚因为conda remove -n labels --all是不可逆的。conda deactivate conda remove -n labels --all如果你只是想重装环境里的包而不想重建环境可以用conda remove单独删某个包或者干脆重新 create 一个同名环境旧环境会被覆盖。3.2 包安装、版本控制与依赖求解器装包的标准写法conda install numpy conda install numpy1.26.4 conda install numpy1.24,1.27第三种写法里的引号不能省因为尖括号在 shell 里有特殊含义。装 PyTorch 的时候稍微麻烦一点因为要区分 CPU 版和 GPU 版。GPU 版需要 CUDA 版本跟显卡驱动匹配。典型命令长这样conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia这里的-c是临时指定频道。注意pytorch-cuda12.1只是指定要装哪个 CUDA 版本的运行时它并不要求你系统里预装 CUDA 工具包这一点新手特别容易误解。显卡驱动版本可以通过nvidia-smi查看只要驱动支持的 CUDA 上限不低于你要装的版本就行。说到依赖求解conda 老版本求解依赖慢是出了名的有时候装一个包能转十分钟。从 23.10 版本开始conda 默认启用了 libmamba 求解器速度提升非常明显。如果你的 conda 版本比较老可以手动切一下conda config --set solver libmamba conda install -n base conda-libmamba-solver实测下来同样的环境在老求解器上要五分钟切到 libmamba 之后经常十几秒就出结果。这是我觉得最值得做的一次性能优化。注意装包时尽量一次性把需要的包写在同一条命令里比如conda install numpy pandas scipy matplotlib。分开装会让求解器跑多轮既慢又容易在中间状态产生版本漂移。3.3 换源、重置源与频道优先级国内使用官方源经常慢得让人怀疑人生换源是刚需。推荐用清华的镜像速度稳定。执行下面几条命令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 show_channel_urls yesshow_channel_urls yes的作用是装包时告诉你是从哪个源拿的排查问题很有用。如果你更想用 conda-forge 生态可以这样配conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge想看看现在的配置敲conda config --show channels。想删掉某一条用conda config --remove channels 那条地址。想恢复官方源有两种做法。轻量做法是conda config --remove-key channels这会删掉channels这个键。彻底做法是直接找到.condarc文件删掉或者把里面的内容清空。这里有个坑要注意如果你在.condarc里手工写了default_channels光删channels是没用的得一起处理掉。还有一种情况是配置被写在多个地方用conda config --show-sources能看到所有生效的配置文件按顺序排查。关于频道优先级conda 默认是按.condarc里channels列表的顺序从上到下查找。所以顺序很关键通用性强的频道放前面专用频道放后面。另外新版 conda 对默认频道有使用条款确认的流程如果你发现装包时卡在提示上可以检查一下是否需要确认相关条款或者干脆把 conda-forge 作为主力频道。3.4 环境导出、备份与迁移这是很多人忽略但实际非常重要的一项技能。换电脑、重装系统、交接项目都会用到。最常用的导出方式conda env export environment.yml这份文件会记录环境名、频道、所有包及版本甚至包含构建号build string。构建号带得很细好处是复现精确坏处是换平台或者换系统之后可能装不上。跨平台迁移建议加上--no-buildsconda env export --no-builds environment.yml这样只保留版本号不锁构建号兼容性好很多。如果你追求极致的可复现性可以用 explicit 清单conda list --explicit spec-file.txt conda create -n newenv --file spec-file.txt这份文件记录的是完整 URL连平台信息都锁死了只能在相同平台上用但复现结果一模一样。想直接打包整个环境目录搬到另一台机器上可以用 conda-pack 这个工具它能连编译好的二进制一起打包适合离线部署。用之前得先装上它conda install -c conda-forge conda-pack conda pack -n labels -o labels.tar.gz到目标机器上解压然后跑一下conda-unpack脚本就能用。提示日常备份我建议维护两份文件——一份environment.yml用于通用迁移一份spec-file.txt用于本机精确恢复。后者在环境被自己搞坏时救命前者在换机器时救命。4. 编辑器与 IDE 集成PyCharm、VSCode 怎么接4.1 PyCharm 配置 conda 解释器在 PyCharm 里给项目配 conda 环境路径是这样的打开File→Settings→Project: 项目名→Python Interpreter点右上角齿轮或者Add Interpreter选Conda Environment。这里有两个选择。第一个是New environmentPyCharm 会帮你新建一个 conda 环境你只需要填环境名和 Python 版本。第二个是Existing environment也就是用你已经在命令行里创建好的环境。我推荐第二种因为命令行的操作更透明出了问题好排查。选Existing environment时解释器路径要填对环境里的 python 可执行文件。Windows 上典型路径是D:\miniconda3\envs\labels\python.exeUbuntu 上是/home/用户名/miniconda3/envs/labels/bin/python这里有个高频坑很多人只填到envs\labels就不填了PyCharm 会提示找不到解释器。一定要精确到python.exe或bin/python。配置完之后PyCharm 右下角会显示当前解释器。你可以直接在里面打开 Terminal它会自动激活对应的 conda 环境不用手动conda activate。这一点比 VSCode 的默认行为友好。另外如果你在 PyCharm 里用了 conda 环境但装包时报权限错误八成是因为你在用 base 环境或者系统 Python。确认右下角切到了正确的环境再装。4.2 VSCode 配置 conda 环境VSCode 本身不是 Python 编辑器它的 Python 能力全靠插件。所以第一步是装Python扩展微软官方那个它会连带装上 Pylance。装完之后按CtrlShiftP打开命令面板输入Python: Select Interpreter列表里会自动识别出所有 conda 环境。选中你要的那个就行。如果没识别出来可以手动输入路径同样是精确到 python 可执行文件。VSCode 有个细节要注意它的集成终端默认不会激活 conda 环境。你需要在设置里把python.terminal.activateEnvironment打开或者手动在终端里跑conda activate 环境名。很多人抱怨“VSCode 里 import torch 失败但命令行里能跑”基本都是这个问题——选中的解释器和终端里用的解释器不是同一个。调试配置也可以显式指定解释器在.vscode/launch.json里写{ version: 0.2.0, configurations: [ { name: Python: Current File, type: debugpy, request: launch, program: ${file}, console: integratedTerminal, python: D:\\miniconda3\\envs\\labels\\python.exe } ] }这样即使自动识别出问题调试时也会用你指定的解释器。4.3 “conda 和 VSCode 的区别”这个问题该怎么理解我在社区里见过不少人搜这个问题其实它本身是个伪命题。conda 是包与环境管理器VSCode 是代码编辑器两者根本不在一个层面上谈不上谁替代谁。真正值得比较的是这两组关系一组是 conda 和 venv这才是同层次的功能对比前面表格里已经讲过。另一组是 VSCode 和 PyCharm这才是编辑器之间的取舍。VSCode 轻、启动快、插件生态杂而全适合多语言混合开发PyCharm 对 Python 项目的支持更深尤其是大型工程的代码跳转、重构和调试体验更成熟。两者都能很好地接 conda选哪个看你自己的习惯。我个人的搭配是轻量的脚本和数据分析用 VSCode大型项目用 PyCharm。conda 环境两边共用同一份不用为不同编辑器重复创建环境。5. 高频报错与排查实录5.1 conda init 相关的报错怎么解报错原文通常是这样的conda error: run conda init before conda activate这个报错的本质是shell 还不知道 conda 的存在所以conda activate这个命令虽然被识别了但它背后的激活逻辑没注册进去。解决分三步。第一步找到 conda 的可执行文件位置通常在~/miniconda3/bin/conda或者 Windows 上的D:\miniconda3\Scripts\conda.exe。第二步执行初始化~/miniconda3/bin/conda init bashzsh 用户把 bash 换成 zshWindows 的 PowerShell 就写conda init powershell。第三步重新加载配置文件source ~/.bashrc如果执行完还是不行可以临时用另一种方式激活eval $(conda shell.bash hook) conda activate labels这条命令的作用是在当前 shell 会话里直接注入 conda 的 shell 函数绕过配置文件。适合写自动化脚本时用因为非交互式 shell 通常不会读.bashrc。还有一种特殊情况你在 Docker 容器里或者 CI 环境里跑每次都是全新的 shell这时候最稳妥的写法是在脚本开头就显式 sourcesource /opt/conda/etc/profile.d/conda.sh conda activate labels5.2 “conda 不是内部或外部命令”的两类原因这个报错在 Windows 上出现频率最高。原因基本只有两个。第一个是安装时没勾选“Add to PATH”。解决办法是手动把 conda 相关目录加到系统环境变量 Path 里。需要加的有四个顺序路径示例作用1D:\miniconda3conda 主目录包含 python.exe2D:\miniconda3\Scriptsconda.exe 所在位置3D:\miniconda3\Library\bin一些二进制工具4D:\miniconda3\condabin新版本推荐的入口加完之后一定要重开一个终端窗口光刷新是不够的环境变量是进程启动时读取的。第二个原因是装是装了但你打开的是系统自带的 CMD而 PATH 里没有 conda。这时候用开始菜单里的Anaconda Prompt就能正常用。这也是为什么很多人“明明装好了却用不了”。Ubuntu 上出现conda: command not found思路类似检查~/.bashrc里有没有 conda 初始化的那段代码没有就手动conda init一次。5.3 WinError 1114 与 DLL 初始化失败这个报错的完整形态是这样的OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading ...\envs\pytorch\lib\site-packages\torch\lib\c10.dll or one of its dependencies.看到这个别慌它不是你代码写错了而是 PyTorch 的底层动态库加载失败。常见原因和排查顺序如下。第一个原因缺 Visual C 运行库。PyTorch 的c10.dll依赖 MSVC 的运行库系统里没装就会报这个错。去装一个 Microsoft Visual C Redistributable 2015-2022 的 x64 版本装完重启多数情况就解决了。这是最高频的原因建议第一步就查这个。第二个原因环境里 conda 和 pip 混装导致库文件版本不匹配。表现是同一个环境里装了两套 torch或者 torch 和 torchvision 版本对不上。排查方法是conda list | grep torch pip list | grep torch两条命令对比一下如果发现同一个包在两个列表里都有而且版本不同那就是混装了。解决办法是干净重装删掉环境重建然后只用一种方式装 torch。第三个原因Python 版本和 torch 版本不兼容。比如你用了很新的 Python 3.12但你要装的 torch 版本当时还没有对应的 wheelconda 或者 pip 可能装了个不匹配的构建。这种情况建议把 Python 降到 3.10 或 3.11兼容性最好。第四个原因PATH 污染。如果你在同一台机器上装了多个 conda、多个 Python或者装过 CUDA Toolkit系统 PATH 里可能有多个版本的 DLL加载时抢到了错误的那一个。排查方法是把环境里所有和 CUDA、torch 相关的目录从系统 PATH 里清掉让环境自己管自己的库。第五个原因杀毒软件或者安全软件拦截了 DLL 加载。这种情况偶尔会遇到表现是同一台机器上重启一次就好、过一会儿又坏。把 conda 环境和项目目录加入白名单即可。注意遇到 DLL 类报错先确认是不是缺运行库再确认是不是混装。这两步能解决八成以上的情况剩下的才需要往 PATH 和权限方向查。5.4 常见问题速查表现象大概率原因处理动作conda: command not foundshell 未初始化执行conda init并 source 配置run conda init before conda activateshell hook 未注册eval $(conda shell.bash hook)临时激活conda 不是内部或外部命令Windows PATH 未配置手动添加四个目录并重开终端装包卡住不动求解器太慢或网络问题切 libmamba换国内源装完 import 失败编辑器解释器选错检查 IDE 中的解释器路径环境删不掉环境正在被占用先 deactivate关掉相关进程换源后仍很慢旧 channel 缓存未清conda clean -i清索引缓存复制环境后路径失效硬编码路径用 conda-pack 打包而不是直接拷贝目录关于清理缓存这个也是常被忽略的。conda 装包会缓存大量 tarball 和索引时间长了能占几十个 G。定期跑一下conda clean --all它会清理下载缓存、索引缓存、未使用的包。我一般两三个月跑一次能腾出不少空间。6. 长期维护的实操心得6.1 目录规划与磁盘占用默认情况下所有环境都存在 conda 安装目录下的envs文件夹里。如果你的 C 盘不大几十个环境很快就能把它塞满。有两个调整思路。第一个思路是把新环境默认建到别的盘。编辑.condarc加上envs_dirs: - D:\conda_envs - D:\miniconda3\envs这样以后conda create会自动优先放在D:\conda_envs。已经存在的环境不会自动搬需要手工迁移或者重建。第二个思路是给包缓存换位置它是空间占用的大头conda config --add pkgs_dirs D:\conda_pkgs顺便说一句pkgs_dirs的缓存是可以跨环境复用的同一个包只下载一次。所以别没事就清缓存除非真的缺空间。提示写路径时尽量用正斜杠/或者双反斜杠\\反斜杠在配置文件里容易被当成转义字符处理写得不对会导致配置静默失效。6.2 版本回退与 conda 自身升级conda 本身也会出新版本有时候新版本会带来一些行为变化比如默认求解器切换、默认频道调整。如果你的工作流在升级后突然出问题回退是个合理选择。回退到指定版本conda install -n base conda24.1.2查看当前版本和历史可用版本conda --version conda list -n base conda如果你不记得具体版本号可以先在频道页面查一下或者用conda search conda24.* -n base这类命令列出候选。升级到最新版conda update -n base conda我自己的习惯是生产环境上的 conda 版本锁死除非有明确需求否则不升。开发机上可以跟着升但要记得升级后重新验证一遍换源配置和求解器配置因为大版本更新有时候会重写.condarc或者改变某些默认行为。另外conda update --all这个命令要慎用。它会尝试升级当前环境里的所有包在依赖关系复杂的环境里很容易把某个包升到一个和其他包不兼容的版本最后环境直接坏掉。稳妥做法是只升级你明确需要升级的包。6.3 日常使用的几条经验第一条一个项目一个环境环境名跟项目名一致。听起来很笨但这是我见过的、最能减少混乱的习惯。半年后回来改老项目看到环境名就知道该激活哪个。第二条environment.yml一定要提交到代码仓库。别只放在本地换机器或者多人协作时它就是救命稻草。提交的时候在文件里写上 Python 版本这是最关键的约束。第三条尽量不要往 base 环境里装项目依赖。base 环境只放 conda 自身和几个通用工具。base 一旦被搞坏修复代价很高严重时只能重装。我见过有人把整个项目的依赖全装在 base 里后来为了解决冲突折腾了一整天。第四条装包之前先conda list看看到底装了什么。很多冲突其实是因为环境里已经存在一个你以为没装的包。这个习惯能省下大量排查时间。第五条遇到玄学问题先做三件事确认当前激活的是哪个环境、确认用的是哪个 Python、确认 IDE 里选的解释器和终端里的一致。我处理过的所谓“环境问题”大概七成卡在这三点上。第六条定期整理环境。三个月没碰过的环境如果没有对应的活跃项目直接删掉。环境多了不但占地方conda env list输出一大串也很影响判断效率。第七条善用conda run。写脚本或者做定时任务的时候不需要先 activate 再执行可以直接conda run -n labels python train.py这条命令会在指定环境里执行脚本输出直接打到当前终端。在 CI 流水线里特别顺手比在脚本里写一堆 activate 逻辑干净得多。唯一要注意的是某些情况下缓冲行为会不一样如果你发现日志不实时输出可以加上--no-capture-output参数。踩过几次坑之后我发现conda 真正难的地方从来不是命令本身那些命令两天就能背下来。难点在于你要建立一套自己的环境管理纪律什么时候建新环境、什么时候该删、什么时候该重建而不是修。修一个坏掉的复杂环境往往比重建要慢而且在修的过程中还可能引入新问题。把环境当成一次性资源来对待心理负担会小很多效率反而更高。
返回列表