ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Conda 环境管理实战:换源、PyTorch 安装与 c10.dll 排查

Conda 环境管理实战:换源、PyTorch 安装与 c10.dll 排查 1. conda 解决的从来不是装包慢而是版本打架我接手过一个挺典型的烂摊子公司老项目跑在 Python 3.7 TensorFlow 1.15 上代码里全是tf.placeholder同时我自己手上要开一个新项目用 Python 3.11 PyTorch 2.x。如果只有一台机器、一套全局 Python这两个项目就是天生互斥的——给老项目降级新项目跑不起来给新项目升级老项目直接报废。在没有隔离工具的年代我干过的蠢事是把 Python 卸了装、装了卸一天来回三次最后连 pip 的缓存都被我清空了。conda 就是来解决这类问题的。它是一套跨语言的包管理器兼环境管理器你可以在同一台机器上并存 Python 3.7、3.9、3.10、3.11 甚至 3.12每个版本各自带一套互不干扰的第三方库。想切项目一条conda activate的事不用卸载任何东西。所以这篇内容我打算把 conda 从装得上讲到用得顺包括安装方式怎么选、conda init那条报错在说什么、换源怎么换才不出问题、环境怎么创建导出删除、PyTorch 装不上和c10.dll加载失败怎么排查、PyCharm 和 VSCode 里解释器该指向哪个文件。刚入门的朋友可以照着抄命令已经用过一阵子的朋友可以重点看第 6 章和第 8 章那里是我踩坑最多的地方。1.1 一个真实的翻车现场先讲个具体的。有次我在一个已经跑通的环境里为了用个新库随手敲了pip install装完之后那个环境直接起不来了——import torch报符号找不到。原因很简单conda 装的 torch 依赖mkl、cudatoolkit、numpy这些由 conda 统一调度版本的二进制包而 pip 装的包自己带一套依赖pip 不看 conda 的账本装上就把 conda 的版本约束打乱了。这种事故有个外号叫环境污染而它的典型症状就是装包的时候一切正常导入的时候才炸。这个例子想说明的是conda 的价值不只是下载得快更关键的是它维护了一张跨包的一致依赖图。pip 只管 Python 包看到numpy1.20就装最新的conda 会把 NumPy、SciPy、BLAS 库、编译器运行库放在一起解算保证它们互相兼容。这也是为什么在科学计算、深度学习场景里conda 的安装结果往往比 pip 耐用。1.2 conda、pip、venv 三者到底什么关系热词里经常有人搜conda 和 vscode 的区别也有人把 pip、venv、conda 混为一谈我干脆一次性理清工具管的语言能否管理非 Python 依赖能否创建隔离环境典型使用场景pip仅 Python不行不行装纯 Python 包环境由别的工具提供venv仅 Python不行可以轻量项目只要一份 Python 环境隔离conda多语言Python/R/C/C 二进制都行可以比如 CUDA 运行库、FFmpeg、OpenBLAS可以科学计算、深度学习、需要二进制依赖的项目我的建议很直接环境用 conda 建包优先用 conda 装conda 里没有的再用 pip 补。顺序反了就容易出事。至于 VSCode它是编辑器conda 是环境管理器两者不在一个维度上——VSCode 需要选择解释器选中的解释器可以是 conda 环境里的那个 Python仅此而已。1.3 三个核心概念channel、environment、package后面所有的操作都建立在这三个概念上我用类比说清楚channel通道包的分发源相当于应用商店。官方商店慢国内有镜像商店这就是换源要干的事。environment环境一个独立的小房间房间里有自己的 Python、自己的包、自己的路径。conda create -n xxx就是盖一个新房间。package包房间里的家具。装包、卸包都是在某个房间里进行的激活哪个房间就操作哪个房间。记住这三点后面看到conda install -n env_name package这种带-n的写法就不会懵——它的意思是装到指定的房间里而不是当前激活的房间。2. 安装这一步Anaconda、Miniconda 怎么选三平台怎么装装 conda 本身没难度难的是选对发行版和装完之后 PATH 的处理。我见过太多人装完打开终端敲conda --version得到一句conda 不是内部或外部命令也不是可运行的程序然后就卡住了。2.1 先做选择全量版还是精简版Anaconda 和 Miniconda 都是 conda 的发行版区别只在于预装包的多少对比项AnacondaMiniconda安装包体积通常 700MB 到 1GB 上下100MB 上下装完占用磁盘3GB 到 5GB 起几百 MB预装包自带 NumPy、Pandas、Jupyter、Spyder 等一堆只有 conda 和 Python适合谁完全新手想开箱即用大多数开发者习惯自己控包我的选择是 Miniconda。原因在于预装的包往往不是你项目要的版本最后还是要升级降级一遍倒不如从干净状态开始。顺带一提安装路径不要带中文和空格Windows 上默认装到C:\Users\你的用户名\miniconda3一般没事但如果你手动改到了我的软件\新文件夹这种路径后面装 PyTorch 的时候有概率出问题。2.2 Windows 下的安装与不是内部或外部命令Windows 用的是图形化安装包一路下一步唯一需要停一下的是那个Add Miniconda3 to my PATH environment variable复选框。我的做法是不勾。原因是它会把 conda 的 Python 塞到系统 PATH 最前面覆盖掉你机器上可能存在的其他 Python后面在别的工具里调 Python 就会指向错误的解释器。正确姿势是装完之后从开始菜单打开Anaconda PromptMiniconda 装完也有这个入口在里面敲命令。如果你已经勾了或者你是装在服务器上没图形界面那就得手动配 PATH。Windows 上把这两个目录加进系统环境变量C:\Users\你的用户名\miniconda3 C:\Users\你的用户名\miniconda3\Scripts C:\Users\你的用户名\miniconda3\Library\bin第三个Library\bin经常被漏掉漏了之后会出现各种 DLL 找不到的怪问题——这一点和第 6 章的c10.dll报错是直接相关的后面细说。2.3 Ubuntu / Linux 上用脚本静默安装Linux 上基本都是脚本安装我习惯用-bbatch不交互和-p指定路径两个参数装到用户目录下避免动到系统 Pythonwget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3装完之后初始化并让配置生效$HOME/miniconda3/bin/conda init bash source ~/.bashrc如果你的默认 shell 是 zsh把bash换成zsh就行。macOS 上如果是 Apple 芯片记得下载 arm64 版本的安装脚本下成 x86_64 的也能跑但是走 Rosetta 转译装包和运行都会慢一截。2.4 装完之后必须验证的三件事不要装完就以为结束了跑这三条conda --version which conda # Windows 上用 where conda conda infoconda info的输出信息量很大重点关注三项base environment的路径对不对、channel URLs是不是你期望的源、envs directories环境会建在哪儿。尤其是最后一项很多人后面发现我创建的环境怎么跑到 C 盘去了答案就在这里。提示base环境只用来管理 conda 自身不要在里面装项目依赖。一是容易把 conda 自己搞坏二是项目迁移的时候没法复现。养成一个项目一个环境的习惯后面会省掉大量麻烦。3. conda init 那条报错其实在讲 shell 的加载机制搜得最多的报错里CommandNotFoundError: Your shell has not been properly configured to use conda activate和conda error: run conda init before conda activate绝对排前几名。很多人照着提示敲了conda init发现还是不行或者换个终端窗口又不行了。这背后有点机制性的东西值得讲清楚。3.1 报错原文与它真正想说的话完整报错一般长这样CommandNotFoundError: Your shell has not been properly configured to use conda activate. To initialize your shell, run $ conda init SHELL_NAME它在说的其实是当前这个 shell 进程里还没有把 conda 的激活脚本加载进来。conda activate并不是一个普通的可执行文件它是 shell 层面的一个函数函数没被定义自然就找不到命令。3.2 conda 是个 shell 函数不是可执行文件这点特别反直觉。你敲的conda命令背后走的是一段 shell 初始化代码它在 shell 启动时被 source 进来定义了conda和conda activate这两个函数。所以conda install能跑通不代表conda activate能跑通。前者可能命中了condabin目录下的批处理文件后者必须依赖 shell 函数。修改了配置文件比如.bashrc、.zshrc之后已经打开的终端不会自动重载必须开新窗口或者手动source。3.3 三种修复姿势与适用场景场景命令说明正常初始化conda init bash然后source ~/.bashrc写入 shell 配置文件永久生效临时用一次eval $(conda shell.bash hook)不改任何文件只对当前窗口生效zsh / fish / PowerShellconda init zsh/conda init fish/conda init powershell参数换成对应的 shell 名第二种姿势我特别推荐在服务器上临时排障时用。有些公司的服务器配置文件不是你能随便改的eval那种写法用完即走不污染别人。Windows 上的表现更花样一点在 Anaconda Prompt 里一切正常在 CMD 或者 PowerShell 里就报错。这时候需要在 PowerShell 里执行conda init powershell然后关闭并重新打开 PowerShell。如果遇到无法加载文件因为在此系统上禁止运行脚本这类提示那是 PowerShell 的执行策略限制改一下策略即可属于一次性配置。3.4 为什么每次开新终端都要重新激活经常有朋友问我在 A 窗口激活了环境为什么 B 窗口还是 base这不是 bug是设计如此。环境激活的状态保存在当前 shell 进程的环境变量里主要是PATH和CONDA_PREFIX新开的窗口是全新进程自然回到默认状态。想让某个项目目录一进去就自动激活对应环境可以借助自动激活能力conda 会在你cd到某个目录时读取该目录及其父目录下的.conda-env之类的标记文件。不过我要提醒一句这个功能在多层嵌套目录下容易触发意外激活我自己的习惯还是手动敲conda activate明确、可控。4. 换源把下载速度从几分钟拉到几秒conda 换源是个高频词也是新手最容易配错的一步。配错的表现通常是装包报 404、报找不到包、报通道连接超时或者干脆把官方源和镜像源混在一起装出来的包一半来自 A 一半来自 B版本冲突。4.1 慢的根因channel 的地理位置conda 默认从repo.anaconda.com拉包这个地址在国内访问的延迟不低装一个 PyTorch 带 CUDA 的包动辄几个 GB慢是必然的。国内几所高校和云厂商提供了全量镜像把默认通道指向镜像下载速度能提升一个数量级。4.2 一份可以直接抄的 .condarc.condarc是 conda 的用户配置文件Windows 在C:\Users\用户名\.condarcLinux/macOS 在~/.condarc。我不太喜欢用一堆conda config --add channels去堆直接编辑文件更清晰下面是清华镜像的完整写法channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud nvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud这里有几个细节值得说一下channels里只写defaults真正的地址交给default_channels这是官方推荐的分层写法避免多个 URL 平铺导致优先级混乱。show_channel_urls: true一定要开装包的时候会打印每个包具体从哪个源来的出问题时能一眼看出是不是走了镜像。custom_channels里的pytorch和nvidia是给深度学习场景准备的很多 PyTorch 相关的包不在默认通道里。改完文件之后跑一句conda config --show channels验证看到镜像地址就对了。4.3 conda 换源和 pip 换源是两回事这是我见过最普遍的误解。conda 换源只管 conda 自己的下载pip 走的是 PyPI两套配置互不相通。所以在 conda 环境里用pip install慢还是慢。pip 的配置要单独写pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple命令执行完会写到~/.config/pip/pip.confWindows 是%APPDATA%\pip\pip.ini。想给单个项目做就在项目下建pip.ini。我的做法是全局配一次之后换机器时把配置文件和.condarc一起带过去省得重来。4.4 想还原官方源怎么办镜像源出问题的时候比如同步挂了、某个包在镜像里不存在需要切回官方源。清空通道配置最干净的方式conda config --remove-key channels conda config --remove-key default_channels conda config --remove-key custom_channels然后conda config --show channels应该能看到defaults。如果.condarc里还有show_channel_urls之类的字段保留没影响。4.5 镜像源不是万能的同步滞后与通道混用的坑镜像有个天然缺陷它是定时从上游同步的存在时间差。最新发布的包官方源有了镜像可能还没有这时候会报类似找不到匹配的包的错报错信息里还看不出是同步问题很容易让人误以为写错了包名。我遇到过两次都是等几个小时之后自动就好了。另一个坑是通道混用。比如你的.condarc里defaults指向清华同时命令里又写了-c pytorch那么 conda 会在两个通道里各找一遍结果可能装了defaults里的 CPU 版 PyTorch而不是你想要的 GPU 版。这种问题非常隐蔽症状是明明装了 GPU 版torch.cuda.is_available()却是 False。排查方法就是加--dry-run先看它打算装什么conda install pytorch --dry-run输出里会列出每个包的版本和来源通道一眼就能看出问题。5. 环境管理创建、克隆、导出、删除的完整命令手册这部分是日常用得最多的我把命令按流程排一遍顺便说说哪几个容易记混。5.1 创建环境的几种写法与版本指定基础写法就一句conda create -n labels python3.9-n后面是环境名python3.9顺手把 Python 版本钉住。这里有个经验一定要在创建时就指定 Python 版本。如果省略conda 会装它自带的默认版本可能是 3.12 或更新等你后面发现某个库不支持这么高的版本只能删了重建。版本号支持模糊匹配python3.9表示 3.9 系列的最新版python3.9.18是钉死某个小版本。做生产项目我建议钉死到小版本做实验可以用大版本。三个实用变体# 同时装几个包 conda create -n web python3.11 flask requests # 从配置文件重建 conda create -n new_env --file requirements.txt # 克隆现有环境改配置时特别好用 conda create -n labels_v2 --clone labels克隆这个操作我强烈推荐。想升级某个大版本库又不确定会不会崩先克隆一份在原环境上试崩了直接切回来比截图记版本号靠谱得多。5.2 查看、激活、退出那几个容易记混的命令新手最容易搞混的是conda env list和conda list一个列环境一个列包命令作用记忆点conda env list等价conda info -e列出所有环境带env就是环境相关conda list列出当前环境里装的包不带env就是当前环境的包conda activate xxx进入某个环境之后所有操作都在这个环境里conda deactivate退出当前环境不需要带环境名conda env list的输出里当前激活的环境前面有个*这个符号是关键线索——排查到底激活了哪个环境时先看这里。还有一个常见误区激活之后which python指向的应该是环境目录下的 Python如果不是说明激活没生效或者 PATH 顺序被别的东西顶掉了。5.3 装包、卸包、查包先 dry-run 再动手装包前用--dry-run预演是我近几年养成的习惯conda install numpy --dry-run它会打印出将要安装哪些包、升级哪些包、降级哪些包、卸载哪些包然后什么都不做。看到它打算降级一堆你正在用的库就该换个版本号约束了。正式安装conda install numpy1.24 conda install -c conda-forge some-package卸载conda remove numpy conda remove -n other_env numpy # 卸载指定环境里的包这里有个高频事故在 base 环境里忘了激活就敲了conda install结果装到 base 去了。预防办法是让终端提示符显示当前环境名conda init之后通常会自动显示(base)这样的前缀看到(base)就该警惕了。5.4 导出与复现environment.yml 与 explicit 清单环境要给别人用或者要部署到服务器导出是标准动作conda env export environment.ymlenvironment.yml会记录环境名、通道和每个包的精确版本。但直接把它拿到别的系统上重建有时会因为平台差异失败因为文件里带了平台相关的构建号。如果目标机器架构一样比如都是 Linux x86_64我更推荐用显式清单conda list --explicit spec-file.txt conda create -n new_env --file spec-file.txt显式清单里全是具体的包 URL 加校验值重建出来的环境和原环境几乎完全一致适合做交付。缺点是跨平台不可用Windows 上导出的清单拿到 Linux 上用不了。注意导出时如果环境里混装了 pip 包environment.yml会额外生成一个pip:段落重建时会自动走 pip 装。这个机制挺好但要注意 pip 段落的包是在 conda 包之后装的顺序错不了。5.5 删除环境与清理残留conda deactivate conda remove -n labels --all两个提醒一是删之前先deactivate不然会提示环境正在使用二是--all不能漏不写只会删掉环境里的包环境目录还在。删完之后磁盘不一定立刻释放因为 conda 有包缓存机制这个留到第 8 章讲瘦身的时候一起说。6. PyTorch 安装和那个 c10.dll 初始化失败热词列表里有个特别长的报错OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。error loading ...\torch\lib\c10.dll。这个我亲身踩过而且是在深夜赶进度的时候当时整个人是懵的。这一章把安装逻辑和排查链路完整写一遍。6.1 先搞清版本三角驱动、CUDA、PyTorch装 GPU 版 PyTorch 之前得先确认三者的兼容关系组件怎么查关注点显卡驱动nvidia-smi右上角有CUDA Version: xx.x这是驱动支持的上限CUDA 运行库由 conda 安装不能超过驱动支持的上限PyTorch官方兼容性表格每个版本有对应的 CUDA 组合关键点驱动版本决定了你能用多新的 CUDA。如果nvidia-smi显示 12.1那你就别装要求 CUDA 12.4 的 PyTorch 版本。另外要注意conda 装的cudatoolkit/pytorch-cuda会自带一份运行库你机器上不需要单独安装系统级 CUDA Toolkit装了反而可能因为版本不一致出问题。6.2 一条命令装完以及它的每一段在做什么conda create -n dl python3.10 -y conda activate dl conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia逐段拆解pytorch-cuda11.8是告诉 conda 要 GPU 版本、运行库走 11.8-c pytorch指定从 PyTorch 官方通道找-c nvidia指定从 NVIDIA 通道找运行库。少写任何一个-c都有可能退化成 CPU 版。装完验证import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))三个输出都对上才算真的装好了。is_available()返回 False 的时候先别急着卸载往下看。6.3 WinError 1114 的完整排查链路回到那个c10.dll报错。它的意思是Python 在导入 torch 的 C 扩展时加载c10.dll这个动态链接库失败。可能的原因有七八种我按从概率高到低的顺序排了一个排查链路照着走基本能定位第一步看是不是包损坏。装到一半断网、磁盘空间不足、下载被安全软件拦截都会导致 DLL 不完整。判断方法对比conda list里 torch 的版本和官方发布的体积或者直接删了重装。conda remove pytorch torchvision torchaudio --force conda clean --packages conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia第二步查 VC 运行库。Windows 上c10.dll依赖微软的 Visual C 运行库缺了就会报 1114。装一个Microsoft Visual C Redistributable 2015-2022x64 版本装完重启。这一条解决过我遇到的一半以上案例。第三步检查 conda 和 pip 混装。这个最隐蔽conda list | findstr torch如果输出里 torch 有两行一行标记pypi一行是 conda 装的那就是冲突。解决办法是彻底卸载干净再只用一种方式装pip uninstall torch torchvision torchaudio -y conda remove pytorch torchvision torchaudio --force第四步看 Python 版本。torch 的预编译轮子对 Python 版本有要求比如某个版本只出到 3.11你在 3.12 环境里装装得上但导入会失败。这种情况把环境重建到匹配的 Python 版本。第五步看路径。安装路径或虚拟环境路径里带中文、带空格、带特殊字符都可能让 DLL 加载失败。输入输出里的那个C:\Users\24303\.conda\envs\pytorch本身没有中文但如果用户名是中文路径就会有中文这时候只能把环境目录整体迁走。第六步查杀毒软件。部分安全软件会把torch\lib下的 DLL 当可疑文件处理静默隔离。把环境目录加白名单或者临时关闭防护重装一次验证。如果六步走完还是不行最后的大招是新建环境从头装而不是在原地反复折腾。环境本身可能已经被污染了清不干净比重装更费时间。6.4 预防胜于抢救环境搭建的几条铁律踩多了之后我给自己定了三条规矩这几年基本没再翻车一个项目一个环境环境名带项目特征。别叫test、env1过两周你完全想不起来它是干嘛的。装深度学习环境时先确认驱动再选 CUDA最后选 PyTorch 版本顺序不能反。装包只用一种方式。我现在的原则是能用 conda 就用 conda只有在 conda 通道里确实找不到通常是些小众的、只发 PyPI 的包时才用 pip并且记下来方便后面复现。7. 让编辑器认识 condaPyCharm 与 VSCode 的配置细节环境和包都装好了最后一步是在编辑器里用起来。这一步的坑主要集中在解释器路径该指哪个文件和为什么终端和编辑器看到的包不一样。7.1 PyCharm解释器路径到底该指哪个文件在 PyCharm 里配置 conda 环境路径是Settings → Project → Python Interpreter → Add Interpreter → Conda Environment。这里有两个选项New environment让 PyCharm 调 conda 新建一个环境。Existing environment选择已有的环境指向envs/环境名/python.exe。我一般选第二种因为环境我自己用命令行建控制得更细。关键细节是conda executable 那一栏填什么。它要的是 conda 的可执行文件不是 Python 解释器WindowsC:\Users\用户名\miniconda3\Scripts\conda.exeLinux/macOS~/miniconda3/bin/conda填错的表现是 PyCharm 提示找不到 conda 可执行文件或者扫描不到环境列表。如果Scripts目录下找不到conda.exe看看是不是只有conda.bat两者都行优先选.exe。7.2 为什么 PyCharm 的包列表和终端对不上这个现象很常见终端里conda list显示装了 80 个包PyCharm 的包管理面板只显示 20 个。原因通常是解释器指错了。比如环境建在D:\conda_envs\labels但 PyCharm 指向了C:\Users\xxx\miniconda3\envs\labels这是两个不同的环境名字一样而已。排查方法很土但管用在 PyCharm 里开一个 Python 控制台敲import sys print(sys.executable)把它和终端里which python的输出对比路径一致就对了。如果不一致回到解释器设置里重新选。7.3 VSCode解释器选择与 settings.jsonVSCode 的配置分两层。临时切换用命令面板CtrlShiftP输入Python: Select Interpreter列表里会显示所有被识别到的 conda 环境。想让项目固定用某个环境就在项目下的.vscode/settings.json里写死{ python.defaultInterpreterPath: D:/conda_envs/labels/python.exe, python.terminal.activateEnvironment: true }第二个参数值得说一下它控制打开终端时是否自动激活选中的环境。默认是 true但前提是 VSCode 能正确识别你的 shell 类型。如果自动激活没生效通常是 shell 配置没被读到检查一下terminal.integrated.profiles的设置或者在设置里把默认终端明确指定成 bash / PowerShell。还有个容易忽略的点VSCode 的 Python 扩展有工作区解释器和全局解释器的区分。多根工作区的项目里每个文件夹可以有自己的解释器改了不生效的时候想想是不是改到了另一个文件夹。7.4 终端自动激活在 IDE 里失灵怎么办IDE 内置终端的激活逻辑和我们手敲conda activate不完全一样它走的是自己的一套检测流程。失灵的时候我的处理顺序是在 VSCode 的终端里手动敲一次conda activate 环境名看能不能成功。能成功说明环境本身没问题是自动检测的问题。检查python.terminal.activateEnvironment是不是被别处的配置覆盖了。检查 VSCode 是不是以管理员权限启动过权限不同会导致环境变量读取不一致。万不得已把python.terminal.activateEnvironment关掉自己在终端里手动激活。PyCharm 那边类似它的 Terminal 默认会激活所选解释器对应的环境如果没激活检查Settings → Tools → Terminal → Shell path是不是被改过。8. 把 conda 用成长期资产备份、回退与瘦身前面讲的都是怎么用这一章讲怎么长期用不崩。8.1 备份真正值得备份的是这三样东西换电脑、重装系统的时候很多人不知道该备份什么。我的清单只有三样备份对象位置作用.condarc用户主目录换源、缓存路径、环境路径等全部配置environment.yml每个项目的根目录环境依赖清单pip 配置pip.ini/pip.confpip 的镜像与信任设置有了这三样新机器上装完 Miniconda把.condarc一放、conda env create -f environment.yml一跑半小时就能恢复工作环境。具体的备份命令cp ~/.condarc ~/backup/condarc.bak conda env export -n labels labels_env.yml项目一多导出会变成体力活。我的做法是写个循环for env in $(conda env list | grep -v ^# | awk {print $1}); do conda env export -n $env ~/backup/$env.yml 2/dev/null done8.2 版本回退升级翻车之后怎么退回去conda update conda之后出现奇怪问题或者升级了某个库导致代码跑不通第一反应别是重装整个环境。conda 自带回退能力conda list --revisions # 查看当前环境的修订记录 conda install --revision 3 # 回退到第 3 个版本这个功能很多人都不知道它是 conda 在每次改动环境时自动存的快照非常实用。要注意的是修订记录只对当前激活的环境有效且只记录 conda 的改动pip 装的包不在里面。如果连 conda 自己都坏了那就得从历史版本装回去conda install conda23.9.0遇到conda命令完全不能用的情况可以直接下载对应版本的 Miniconda 安装包覆盖安装.condarc和已有环境目录都不会被动。8.3 瘦身pkgs 缓存能吃掉多少磁盘conda 的包缓存是把双刃剑。好处是装同样的包不用重复下载坏处是它会一直涨。我见过最夸张的一台机器pkgs目录占了 20 多个 GB。查看占用conda clean --dry-run --all清理conda clean --index-cache # 清索引缓存 conda clean --packages # 清未使用的包 conda clean --tarballs # 清下载的压缩包 conda clean --all # 以上全清我的建议是分两步conda clean --tarballs可以放心执行压缩包下载完就没用了conda clean --packages要谨慎它会删掉当前没被任何环境引用的包下次装同样的包要重新下载。磁盘紧张的时候执行一次平时不用频繁清。8.4 把环境和缓存挪到别的盘Windows 用户最常遇到的问题是 C 盘爆了因为 conda 默认把环境建在C:\Users\用户名\miniconda3\envs。解决办法是改.condarcenvs_dirs: - D:\conda_envs pkgs_dirs: - D:\conda_pkgs改完之后新建的环境就会落到 D 盘。两个注意点一是 D 盘的目标目录要先手动创建conda 不会帮你建父目录二是已经建好的环境不会自动迁移需要手动移动目录然后重建或者干脆用conda env export加conda env create的方式搬过去。我一直建议在装完 conda 的第一时间就改这两个配置等环境建了一堆再改迁移成本高很多。8.5 团队协作里的版本锁定习惯最后说一个协作层面的经验。团队里如果有人用 Windows、有人用 macOS、有人用 Linux环境复现的难度会陡增。我的处理方式是提供一个environment.yml作为基线但不要求所有人逐包一致关键依赖框架、编译器、运行库版本钉死到小版本在 README 里写清楚 Python 版本、conda 版本、有没有 GPU以及必须用 conda 装的包清单。原因在于跨平台的二进制包本身就不一样追求完全一致既不现实也没必要把影响结果的少数几个变量锁住才是务实的做法。我个人在实际操作中的体会是conda 的绝大部分麻烦都不是它本身的问题而是用了一半又跑去用 pip换了源没告诉别人环境建在 C 盘却不知道这类习惯问题。把.condarc配好、把环境路径改好、把依赖导出好这三件事做完conda 基本就是个安静的工具剩下的时间你可以专心写代码。最后再分享一个小技巧把常用的几条命令做成 shell 别名比如alias clconda env list、alias caconda activate一天下来能省不少敲键盘的力气。
返回列表