☰
Miniconda安装到D盘与conda虚拟环境迁移配置指南
2026/10/1 4:33:51 网站建设 项目流程

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等可执行文件小,几十MB
pkgs下载的包缓存,所有环境共享会,10GB以上很常见
envs虚拟环境的默认位置会,每个环境1-8GB
Lib\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.txt,Windows默认隐藏已知扩展名,很容易出这个问题)、YAML缩进用了Tab而不是空格、或者路径所在的D盘目录没有写权限。

这里单独说一下**.condarc.txt这个坑**。Windows资源管理器默认隐藏已知文件类型的扩展名,你新建一个文本文档命名为.condarc,实际文件名是.condarc.txt,conda根本不认。解决办法是在资源管理器的“查看”选项卡里勾上“文件扩展名”,确认文件名正确;或者干脆别手动建文件,直接用conda config --add命令生成,最省事。

另一个验证方法是直接建一个测试环境,看它落在哪:

conda create -n path_test python=3.11 -y conda info --envs

conda info --envs会列出所有环境及其完整路径。如果新环境显示为D:\conda_envs\path_test,那就成功了,确认完记得删掉这个测试环境:conda remove -n path_test --all -y。

4. 从建环境到迁移:一套完整的D盘环境管理流程

4.1 创建、激活、退出:新手最容易搞混的三件事

确认配置生效之后,正式建环境。命令很简单:

conda create -n myproject python=3.11 -y

-n后面是环境名,尽量用英文、数字、下划线,不要用中文和空格。python=3.11指定Python版本,不指定的话会装conda默认的最新版。-y是自动确认,不加的话会停下来问你一次,加不加都行。

这里解释一下为什么指定Python版本很重要。conda在解析依赖的时候,会根据你指定的版本去解算一整套匹配的包组合。如果你不指定,它装最新版,那么半年后你在另一台机器上重建环境,可能装到的是更新的一版,某些包的API变了,代码就跑不起来。所以我的习惯是:所有正式项目的第一行命令都写清楚Python小版本号,比如python=3.11,而不是python=3或者不写。

建完之后激活:

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,就有风险。彻底关闭用户级安装的办法是设一个环境变量PYTHONNOUSERSITE=1,或者执行pip config set global.user false。我自己是直接在系统环境变量里设了PYTHONNOUSERSITE=1,一劳永逸,避免以后装了包找不到。

实操心得:装完一批包之后,立刻执行一次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的正确顺序是:

  1. 用conda env list列出所有环境,把需要保留或者备份的先处理掉。
  2. 执行conda clean --all -y清理缓存。
  3. 从Windows的“添加或删除程序”里卸载Miniconda(如果安装时没生成卸载项,就手动删安装目录)。
  4. 手动检查并删除残留目录: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_pkgs
CondaValueError: 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盘,它可能扫不到。

解决办法有两个。一是手动指定:Ctrl+Shift+P打开命令面板,输入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目录完整,那么环境其实都还在,只是少了注册信息和快捷方式。

补救步骤是:手动打开一个cmd,cd到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-history,yml里会包含大量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 -y;D:\DevEnvs里如果有两个月没用过的环境,先用conda env export导出备份,再删掉。这两步操作下来,一般能稳定释放20GB以上。

最后分享一个我自己用的偷懒技巧:给conda clean --all -y做一个别名或者批处理文件放在桌面,双击就清。因为这个命令好记但容易忘,做成一个可点击的东西,执行频率会高很多。环境管理这件事,说到底不是技术难,是麻烦,把麻烦的操作变成一键,才能长期坚持。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询