ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Miniconda安装到D盘与conda虚拟环境迁移配置指南

Miniconda安装到D盘与conda虚拟环境迁移配置指南 1. C盘红了之后我把整套Python环境搬到了D盘先说结论Miniconda装在哪个盘和虚拟环境建在哪个盘是两件可以分开控制的事。很多人以为“我把Miniconda装到D盘了虚拟环境自然就在D盘”结果跑了一个月发现C盘又少了十几个G——因为conda默认把环境建在安装目录下的envs文件夹但如果你装的时候选了“All Users”或者用了某些安装包的默认设置环境目录其实会落到用户目录里也就是C:\Users\你的用户名\.conda\envs。这个坑我踩过两次第一次是笔记本256G的C盘剩3G的时候第二次是给同事配机器的时候。所以这篇内容要解决的问题非常具体Miniconda怎么装、虚拟环境怎么在D盘创建、装完之后怎么验证、出问题怎么排查。适合三类人看一是C盘快满了想给开发环境搬家的二是刚学Python想一次性把目录规划做对的三是已经装完想迁移现有环境、又不想重装一堆包的。全文的操作都在Windows下验证过macOS和Linux的差异我会在关键位置单独说明因为磁盘路径写法完全不同。我把整个流程拆成四块安装阶段怎么选路径、配置阶段怎么改默认环境目录、使用阶段怎么建和迁移环境、出问题怎么排查。每一块都会说明白“为什么这么选”而不是只给一串命令让你照抄——照抄的东西换个版本就失效理解机制才能自己修。2. 安装阶段的路径规划装在哪里决定了后面好不好管2.1 安装包从哪拿为什么我不推荐第三方打包版Miniconda的安装包只有官网和几个高校镜像站这两个靠谱来源。官网的下载速度在国内通常比较慢所以我一般直接去清华的镜像站拿安装包路径是https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/里面按版本号排列找最新的Miniconda3-latest-Windows-x86_64.exe就行。这里要注意一点Miniconda3后面如果带py312这类字样说明它自带的基础Python版本是3.12这个数字只影响base环境不影响你后面建虚拟环境时指定任意版本。为什么不推荐某些软件管家或者第三方站点的打包版因为这些版本经常被人重新打包过安装向导里的默认选项被改过比如默认勾选了“Add to PATH”或者默认装到C:\ProgramData下面。ProgramData这个位置有个特点它对所有用户可见但写入权限比较严格后面conda建环境时如果没提权可能会报PermissionError。我遇到过最离谱的一次是某个打包版把envs目录直接硬编码到了C:\Users\Public\Documents下面用户在D盘怎么配都没用。提示安装包下载完先看文件大小正常的Windows 64位Miniconda安装包在70MB到100MB之间不同版本有浮动如果只有几MB基本可以判定是下载器或者被替换过的文件直接删掉重下。2.2 安装向导里那几个复选框到底怎么勾双击安装包一路下一步到“Installation Type”这一步会看到两个选项Just Me (recommended)和All Users (requires admin privileges)。我的建议是选 Just Me。原因很实在All Users 会把安装目录放到C:\ProgramData\Miniconda3虽然安装时你能改路径但后续升级、卸载、以及某些包的编译过程中会频繁触发权限检查尤其是需要写.conda缓存的时候。Just Me 装在你自己的用户目录下权限干净唯一的问题就是默认路径在C盘但这个我们下一步手动改掉就行。到了“Advanced Options”这一步有两个复选框Add Miniconda3 to my PATH environment variable——不要勾。官方在这个选项下面明确写了“Not recommended”原因是把conda的Python加到系统PATH之后会和你机器上已有的其他Python、以及pip命令打架。你以后在任意终端敲python可能跑的是conda的base环境而你自己都不知道。正确做法是用开始菜单里的“Anaconda Prompt (Miniconda3)”来操作这个快捷方式会自动帮你初始化好conda环境。Register Miniconda3 as my default Python 3.x—— 这个可以勾也可以不勾。勾了之后.py文件双击会用Miniconda的Python打开如果你装了别的Python也可能被抢影响不大。我一般勾上省得以后有别的程序需要“找一个Python”。2.3 安装路径的命名讲究和目录结构确认点击“Browse”把安装路径改成D:\Miniconda3。这里有几个经验性的建议路径不要带空格和中文。D:\Program Files\Miniconda3这种写法在99%的情况下没事但剩下1%的情况会让你很痛苦——某些老版本的编译工具链、某些Python包的构建脚本在处理带空格的路径时不加引号直接崩。同理D:\软件\Miniconda3这种中文路径在conda输出日志、pip安装编译型包、以及和VSCode配合的时候都可能出现编码问题。我现在的习惯是D盘根目录下建一个DevTools文件夹所有开发相关的工具都往里放路径短、干净、没有特殊字符。安装目录所在的磁盘分区格式最好是NTFS。如果你这块D盘是移动硬盘或者老的exFAT格式conda在创建环境时会用到符号链接和硬链接来节省空间exFAT不支持硬链接会导致conda create报错或者环境创建时间异常长。检查方法是在D盘上右键属性看“文件系统”那一行。如果是exFAT建议换个分区或者接受环境体积翻倍的代价。装完之后进D:\Miniconda3看一眼目录结构几个关键文件夹先记住目录作用是否会占大量空间Scriptsconda、pip等可执行文件小几十MBpkgs下载的包缓存所有环境共享会10GB以上很常见envs虚拟环境的默认位置会每个环境1-8GBLib\site-packagesbase环境自己的包base里包越多越大记住这张表的原因C盘空间告急的根本原因九成出在pkgs和envs两个目录上。安装目录本身只有几百MB真正吃空间的是后面不断累积的包缓存和虚拟环境。所以哪怕你把Miniconda装到了D盘如果没改pkgs和envs的默认位置它们还是可能出现在C盘的用户目录下——这就是我开头说的那个坑。3. 让conda默认在D盘建环境.condarc的三个核心配置3.1 .condarc是什么为什么它比改环境变量更靠谱.condarc是conda的配置文件一个YAML格式的纯文本文件。Windows下它的默认位置是C:\Users\你的用户名\.condarc这个文件默认是不存在的需要你自己创建或者用命令生成。conda在每次运行时会去读它里面的配置优先级高于conda的内部默认值。为什么我推荐用.condarc而不是设环境变量因为环境变量比如CONDA_ENVS_PATH的优先级其实比.condarc更高一旦你设了环境变量.condarc里对应的项就被覆盖了排查问题的时候你不容易想起来自己还改过环境变量。而且环境变量是全局的换一个终端、换一个用户就没了容易造成“我昨天还好好的今天怎么又建到C盘了”这种问题。.condarc是用户级的文件跟着你的用户走稳定、可见、好回滚。生成.condarc最简单的方式是用命令conda config --add envs_dirs D:\conda_envs conda config --add pkgs_dirs D:\conda_pkgs这两条命令会自动在你的用户目录下创建.condarc并写入内容。执行完可以打开看一下或者用conda config --show-sources查看当前生效的配置来自哪些文件。3.2 envs_dirs和pkgs_dirs的具体写法与优先级机制手动编辑.condarc的话内容大概长这样envs_dirs: - D:\conda_envs pkgs_dirs: - D:\conda_pkgs channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - defaults show_channel_urls: true这里有几个细节值得展开说。第一路径的斜杠方向。在.condarc里D:\conda_envs和D:/conda_envs都能识别但我在多个版本上测试下来正斜杠D:/conda_envs更稳。原因是反斜杠在YAML里虽然不算转义字符但某些版本的conda在拼接路径时会把它当成分隔符处理两次导致路径变成D:\conda_envs\\xxx这种奇怪的形式。用正斜杠完全避免这个问题Windows的API本身也认正斜杠。第二envs_dirs是一个列表可以有多个。列表里第一个可写的目录会被作为新建环境的默认位置。这就是为什么你可以既保留C盘的用户环境目录、又加上D盘目录——conda会按顺序尝试哪个先成功用哪个。但我不建议这么干因为你会搞不清楚新建的环境到底在哪。要么把D盘路径放在唯一位置要么放在列表第一位并用conda config --show envs_dirs确认顺序。第三pkgs_dirs和envs_dirs最好同时改。只改envs_dirs的话虚拟环境建在D盘了但每次下载的包缓存还在C盘的C:\Users\你的用户名\.conda\pkgs下面一样会撑爆C盘。这个pkgs目录是conda的“下载缓存池”所有环境共享好处是同一个包只下载一次坏处是它只增不减除非你手动执行conda clean。注意envs_dirs指向的目录必须已经存在并且当前用户有写权限。conda不会自动创建顶层目录只会创建它下面的子环境文件夹。所以你要先手动在D盘建好D:\conda_envs和D:\conda_pkgs两个空文件夹。如果你把目录设成D:\Program Files\conda_envs很可能因为权限不足报错因为Program Files默认只给了管理员写权限。3.3 配置生效验证三条命令确认环境目录真的挪过去了配置改完不要急着建环境先验证。我固定用三条命令conda config --show envs_dirs conda config --show pkgs_dirs conda info前两条直接看返回的列表里D:\conda_envs是不是排第一位。conda info的输出信息量最大里面有envs directories、package cache、base environment这几行能一次性看到所有路径的实际情况。如果envs directories里第一行还是C:\Users\...\.conda\envs说明配置没生效通常是三种原因文件名写错比如写成了.condarc.txtWindows默认隐藏已知扩展名很容易出这个问题、YAML缩进用了Tab而不是空格、或者路径所在的D盘目录没有写权限。这里单独说一下**.condarc.txt这个坑**。Windows资源管理器默认隐藏已知文件类型的扩展名你新建一个文本文档命名为.condarc实际文件名是.condarc.txtconda根本不认。解决办法是在资源管理器的“查看”选项卡里勾上“文件扩展名”确认文件名正确或者干脆别手动建文件直接用conda config --add命令生成最省事。另一个验证方法是直接建一个测试环境看它落在哪conda create -n path_test python3.11 -y conda info --envsconda info --envs会列出所有环境及其完整路径。如果新环境显示为D:\conda_envs\path_test那就成功了确认完记得删掉这个测试环境conda remove -n path_test --all -y。4. 从建环境到迁移一套完整的D盘环境管理流程4.1 创建、激活、退出新手最容易搞混的三件事确认配置生效之后正式建环境。命令很简单conda create -n myproject python3.11 -y-n后面是环境名尽量用英文、数字、下划线不要用中文和空格。python3.11指定Python版本不指定的话会装conda默认的最新版。-y是自动确认不加的话会停下来问你一次加不加都行。这里解释一下为什么指定Python版本很重要。conda在解析依赖的时候会根据你指定的版本去解算一整套匹配的包组合。如果你不指定它装最新版那么半年后你在另一台机器上重建环境可能装到的是更新的一版某些包的API变了代码就跑不起来。所以我的习惯是所有正式项目的第一行命令都写清楚Python小版本号比如python3.11而不是python3或者不写。建完之后激活conda activate myproject激活成功的标志是终端提示符前面多了(myproject)。退出用conda deactivate。这里有个新手常踩的坑在普通的cmd或者PowerShell里直接敲conda activate会报“CommandNotFoundError”因为conda需要在初始化过的shell里才能用。解决办法就是用开始菜单里的“Anaconda Prompt”或者给PowerShell执行一次conda init powershell然后重启终端。我个人更推荐前者因为后者会修改你的PowerShell配置文件以后每次开PowerShell都会有conda的输出有人不喜欢。激活环境之后用这两条命令确认自己确实在D盘环境里where python python -c import sys; print(sys.prefix)where python在Windows下会列出所有叫python的可执行文件排在第一位的就是当前生效的。sys.prefix直接告诉你当前Python的根目录正常应该输出D:\conda_envs\myproject。这两条命令我建议养成习惯尤其是当你不确定环境有没有激活成功的时候。4.2 装包阶段的注意事项pip和conda不要混着乱用环境建好之后装包这时候有一个绕不开的问题用conda install还是pip install我的原则是科学计算相关的numpy、scipy、pandas、pytorch这类带编译扩展的优先conda install因为conda提供的是预编译好的二进制包直接解压就能用不需要本机有编译器。纯Python的、或者conda仓库里没有的比如一些小众库、内部包用pip install。尽量不要在同一个环境里反复用两个工具装同一个包因为conda不知道pip装了什么pip也不知道conda装了什么升级的时候容易互相踩。用pip装包时还有一个隐藏的C盘占用问题需要堵住。pip默认会检查用户级目录C:\Users\你的用户名\AppData\Roaming\Python\Python311\site-packages如果这个目录存在某些情况下pip会往这里装东西而不是装到当前虚拟环境里。判断当前pip到底往哪装用python -m site输出里的USER_SITE如果是C盘路径且ENABLE_USER_SITE是True就有风险。彻底关闭用户级安装的办法是设一个环境变量PYTHONNOUSERSITE1或者执行pip config set global.user false。我自己是直接在系统环境变量里设了PYTHONNOUSERSITE1一劳永逸避免以后装了包找不到。实操心得装完一批包之后立刻执行一次conda clean --all -y把下载的tarball和多余的缓存清掉。这个命令会保留当前在用环境的依赖删掉的是.conda\pkgs和D:\conda_pkgs里的压缩包缓存。我见过一个同事的pkgs目录攒到23GB全是各种版本的numpy和pytorch安装包清完直接回血。4.3 把C盘已有环境搬到D盘两种方案的实际对比如果你已经有一堆环境在C盘不想重建重建意味着重新装几十个包还要重新解决依赖可以用克隆加重删的方式迁移。方案一克隆法conda create -n myproject_d --clone myproject conda remove -n myproject --all -y克隆出来的环境在D盘因为默认目录已经改到D盘了原来的在C盘确认新的能用之后删掉旧的。这个方法的优点是安全出问题随时能退回缺点是占用的磁盘空间在中间阶段是双份的如果你的C盘只剩2GB这个方法直接跑不动。方案二conda-pack打包法conda install -c conda-forge conda-pack conda pack -n myproject -o myproject.tar.gz conda create -n myproject_d --clone myproject # 或者直接解压conda-pack会把整个环境打包成一个压缩包包含所有包和可执行文件可以在另一台机器或者另一个目录解压使用。它最大的价值是跨机器迁移和离线部署但用它做同盘迁移有点重因为还要在解压后执行一次conda-unpack来修正路径。我的建议是同一台机器内迁移用克隆法要拷给别人或者要在无网络环境下重建用conda-pack。做完迁移之后务必用conda info --envs确认环境列表里C盘的旧环境已经消失D盘的新环境路径正确然后进新环境跑一遍你的项目代码确认没有因为路径写死导致的报错。4.4 卸载和清理别让残留文件继续占着C盘如果整套环境都要推倒重来卸载Miniconda的正确顺序是用conda env list列出所有环境把需要保留或者备份的先处理掉。执行conda clean --all -y清理缓存。从Windows的“添加或删除程序”里卸载Miniconda如果安装时没生成卸载项就手动删安装目录。手动检查并删除残留目录C:\Users\你的用户名\.conda、C:\Users\你的用户名\.condarc、C:\Users\你的用户名\AppData\Local\conda、C:\Users\你的用户名\AppData\Roaming\Python。这四个地方经常被遗漏加起来可能有GB级别的占用。删掉.conda目录的时候要想清楚里面除了环境还可能有你的environments.txt历史记录。如果你只是想清理空间、不想丢环境列表可以先备份这个文件。5. 问题排查速查表我实际遇到过的八个报错5.1 权限与路径类报错报错关键词常见原因解决办法PermissionError: [WinError 5]目标目录无写权限常见于Program Files、ProgramData换到D:\conda_envs这类普通目录或对目录授予当前用户完全控制权限EnvironmentLocationNotFound环境路径里有中文或空格conda定位失败环境名和路径全用英文数字下划线The system cannot find the path specified.condarc里的路径目录不存在先手动创建D:\conda_envs和D:\conda_pkgsCondaValueError: Unable to create environmentD盘空间不足或者分区格式是exFAT不支持硬链接检查剩余空间换NTFS分区关于权限这块补充一个场景有些公司的电脑对D盘做了策略限制普通账户只能读不能写。表现就是你手动建文件夹时弹出“你需要提供管理员权限才能新建文件夹”。这种情况下.condarc配置得再对也没用要么让IT给你在D盘某个目录开写权限要么把环境目录放到用户目录下的另一个位置但那还是在C盘。判断方法是在D盘目标目录里用命令行执行echo test test.txt能成功说明可写。5.2 配置了不生效的排查路径配置不生效是最让人抓狂的一类问题因为它不报错只是默默把环境建到了C盘。排查顺序我总结成四步第一步conda config --show-sources看当前生效的配置文件到底有哪些。如果输出里根本没有你编辑的那个文件说明文件位置或名字有问题。第二步检查环境变量里有没有CONDA_ENVS_PATH。这个变量的优先级比.condarc高会直接覆盖envs_dirs。检查方法是在PowerShell里执行$env:CONDA_ENVS_PATH在cmd里执行echo %CONDA_ENVS_PATH%。如果有值删掉它。第三步看一下envs_dirs列表的顺序。如果你之前用--append加过路径D盘路径可能排在C盘后面conda会优先用列表里第一个可写的。用conda config --remove envs_dirs 旧路径删掉不需要的再--add一次D盘路径。第四步确认你激活的conda是哪一个。有些机器上同时装了Anaconda和Miniconda你以为在用Miniconda的conda命令实际可能是Anaconda的。用where conda看返回路径。5.3 VSCode里选不到D盘环境怎么办VSCode配合conda环境的时候最常见的现象是终端里conda activate明明成功了但VSCode右下角的解释器列表里翻不到这个环境。原因是VSCode的Python扩展会扫描几个固定位置的环境如果你把它扫描的位置之外的环境建在D盘它可能扫不到。解决办法有两个。一是手动指定CtrlShiftP打开命令面板输入Python: Select Interpreter选择Enter interpreter path然后手动填D:\conda_envs\myproject\python.exe。二是把D盘的环境目录加到VSCode的设置里在settings.json中配置python.condaPath和python.venvPath指向你的目录。提示VSCode自己的缓存和扩展也会占C盘空间尤其是C:\Users\你的用户名\AppData\Roaming\Code这个目录用久了能到几个GB。如果你想把VSCode的数据也挪到D盘可以给它建一个快捷方式目标写成D:\VSCode\Code.exe --user-data-dir D:\VSCodeData --extensions-dir D:\VSCodeExt这样配置、缓存、扩展全部落到D盘。这个操作和conda无关但经常和“D盘环境”的需求一起出现顺手提一句。5.4 系统还原或重装之后的补救有一个比较极端的场景Miniconda装在D盘虚拟环境也在D盘结果系统出了点状况做了还原桌面上的“Anaconda Prompt”快捷方式没了命令行里敲conda也不认识。这时候别急着卸载重装先确认D盘的文件还在不在。如果D:\Miniconda3目录完整那么环境其实都还在只是少了注册信息和快捷方式。补救步骤是手动打开一个cmdcd到D:\Miniconda3\Scripts执行conda init cmd.exe然后关掉重开终端。conda init会往注册表或者PowerShell配置文件里写入初始化脚本让conda命令重新可用。如果condabin目录里的conda.bat还在也可以直接把它所在目录加到PATH里临时救急。注意如果还原之后D盘出现“拒绝访问”或者整个D盘消失的情况那是分区表或磁盘权限层面的问题属于系统维护范畴不是conda能解决的。这时候第一优先级是别往这个盘再写数据找专业的数据恢复手段。日常的好习惯是项目代码用Git管理环境用environment.yml导出这样即使环境全丢了conda env create -f environment.yml也能在半小时内重建。导出环境清单的命令是conda env export -n myproject myproject_env.yml这个yml文件记录了所有包和精确版本重建时用conda env create -f myproject_env.yml。注意导出时如果不加--from-historyyml里会包含大量pip和构建信息换平台可能失败加了--from-history则只记录你显式安装过的包跨平台兼容性更好但重建时版本可能漂移。我的做法是两个都导出一份一个用于精确复现一个用于跨机器部署。6. 一些长期维护上的个人经验6.1 目录命名和分层管理用了几年之后我现在的目录规划是这样的D:\DevTools\Miniconda3放安装本体D:\DevEnvs放所有项目环境环境名统一用项目名_py版本的格式比如spider_py311。这样做的好处是半年后你回头看环境列表一眼就知道每个环境是给谁用的、基于哪个Python版本。纯粹用env1、test、newenv这种名字过两个月你自己都不记得哪个是哪个。还有一个习惯是定期给base环境瘦身。base环境默认装了一些包但很多人还会往里装各种东西导致base越来越臃肿。base环境的唯一职责是提供conda命令本身其他任何包都应该装到独立环境里。如果你的base已经装乱了可以执行conda list -n base看看把不需要的用conda remove -n base 包名删掉。但要注意别删conda自己否则整个工具就废了。6.2 磁盘空间监控和定期清理D盘也不是无限的尤其是笔记本上D盘可能只有200GB。我建议每个月花两分钟做一次检查D:\conda_pkgs超过10GB就执行conda clean --all -yD:\DevEnvs里如果有两个月没用过的环境先用conda env export导出备份再删掉。这两步操作下来一般能稳定释放20GB以上。最后分享一个我自己用的偷懒技巧给conda clean --all -y做一个别名或者批处理文件放在桌面双击就清。因为这个命令好记但容易忘做成一个可点击的东西执行频率会高很多。环境管理这件事说到底不是技术难是麻烦把麻烦的操作变成一键才能长期坚持。
返回列表