1. 问题背景
Windows 下安装 Anaconda 时,我将 Anaconda 安装到了:
D:\software\Anaconda3但是执行:
conda env list发现虚拟环境却被创建到了 C 盘:
# conda environments: # py312 C:\Users\Lenovo\.conda\envs\py312 py313 C:\Users\Lenovo\.conda\envs\py313 base * D:\software\Anaconda3也就是说:
Anaconda 主程序在 D 盘;
base环境在 D 盘;新创建的
py312、py313环境却在 C 盘。
我的目标是以后所有 Conda 虚拟环境统一放到:
D:\software\Anaconda3\envs同时将已经创建在 C 盘的环境迁移到 D 盘。
2. 为什么 Anaconda 在 D 盘,虚拟环境却在 C 盘?
Conda 的安装目录和虚拟环境目录并不是必须相同的。
例如:
Anaconda: D:\software\Anaconda3 虚拟环境: C:\Users\Lenovo\.conda\envs这是完全允许的。
Conda 会维护多个虚拟环境搜索路径,可以通过:
conda info查看。
例如:
envs directories : D:\software\Anaconda3\envs C:\Users\Lenovo\.conda\envs C:\Users\Lenovo\AppData\Local\conda\conda\envsConda 创建环境时,会选择优先级较高并且当前用户具有写权限的目录。
因此,即使 Anaconda 安装在:
D:\software\Anaconda3如果普通 Windows 用户无法写入:
D:\software\Anaconda3\envsConda 就可能自动退回到:
C:\Users\用户名\.conda\envs这也是为什么虚拟环境最终出现在 C 盘。
3. 设置以后所有虚拟环境默认保存到 D 盘
希望以后执行:
conda create -n test python=3.12时,环境自动创建到:
D:\software\Anaconda3\envs\test可以执行:
conda config --prepend envs_dirs D:\software\Anaconda3\envs然后检查:
conda config --show envs_dirs如果看到:
envs_dirs: - D:\software\Anaconda3\envs - C:\Users\Lenovo\.conda\envs说明配置已经生效。
关键是:
D:\software\Anaconda3\envs必须排在第一位。
此时再创建环境:
conda create -n test python=3.12理论上应该生成:
D:\software\Anaconda3\envs\test4. 迁移已有 Conda 环境时遇到 WinError 5
已有环境:
C:\Users\Lenovo\.conda\envs\py312准备迁移到:
D:\software\Anaconda3\envs\py312使用:
conda create --prefix D:\software\Anaconda3\envs\py312 --clone C:\Users\Lenovo\.conda\envs\py312但出现错误:
PermissionError: [WinError 5] 拒绝访问。 'D:\software\Anaconda3\envs\py312'在conda info中还可以看到:
base environment : D:\software\Anaconda3 (read only) administrator : False这说明问题不是 Conda 环境本身损坏,而是:
当前 Windows 用户没有权限向
D:\software\Anaconda3\envs写入文件。
5. 正确解决 WinError 5
不建议以后每次都使用“管理员身份运行 Anaconda Prompt”。
更合理的方法是:
给当前 Windows 用户授予
envs目录的修改权限。
假设 Windows 用户名为:
Lenovo首先以管理员身份打开 CMD:
Windows 搜索 → cmd → 右键 → 以管理员身份运行然后执行:
icacls "D:\software\Anaconda3\envs" /grant Lenovo:(OI)(CI)M /T其中:
Lenovo是 Windows 用户名。
参数含义:
M表示 Modify,即修改权限。
(OI)表示文件继承权限。
(CI)表示子目录继承权限。
/T表示递归应用到所有子目录。
6. 建议同时给 pkgs 目录权限
Conda 下载的软件包缓存通常位于:
D:\software\Anaconda3\pkgs如果这个目录也没有写权限,将来安装包时仍可能报类似权限错误。
因此建议同时执行:
icacls "D:\software\Anaconda3\pkgs" /grant Lenovo:(OI)(CI)M /T最终执行的两个命令为:
icacls "D:\software\Anaconda3\envs" /grant Lenovo:(OI)(CI)M /T icacls "D:\software\Anaconda3\pkgs" /grant Lenovo:(OI)(CI)M /T完成后关闭管理员 CMD。
以后正常打开 Anaconda Prompt 即可,不需要一直使用管理员权限。
7. 测试 D 盘目录是否已经可写
正常打开 Anaconda Prompt。
执行:
mkdir D:\software\Anaconda3\envs\test_write如果没有报错,说明已经有写权限。
然后删除测试目录:
rmdir D:\software\Anaconda3\envs\test_write8. 重新迁移 py312 环境
不要直接在资源管理器中剪切:
C:\Users\Lenovo\.conda\envs\py312然后粘贴到 D 盘。
因为 Conda 环境中的某些脚本和配置可能包含绝对路径,直接移动可能导致环境异常。
推荐使用 Conda 自带的 clone。
首先:
conda activate base然后:
conda create --prefix D:\software\Anaconda3\envs\py312 --clone C:\Users\Lenovo\.conda\envs\py312如果之前失败的 clone 已经留下:
D:\software\Anaconda3\envs\py312这样的残缺目录,可以先删除:
rmdir /s /q D:\software\Anaconda3\envs\py312然后重新执行 clone。
9. 迁移 py313
同理:
conda activate base执行:
conda create --prefix D:\software\Anaconda3\envs\py313 --clone C:\Users\Lenovo\.conda\envs\py31310. 检查环境是否迁移成功
执行:
conda env list迁移过程中可能暂时看到:
py312 C:\Users\Lenovo\.conda\envs\py312 py313 C:\Users\Lenovo\.conda\envs\py313 D:\software\Anaconda3\envs\py312 D:\software\Anaconda3\envs\py313 base D:\software\Anaconda3出现两份环境是正常的。因为此时旧环境还没有删除。
11. 测试迁移后的环境
测试py312:
conda activate D:\software\Anaconda3\envs\py312然后:
where python正常情况下应该优先看到:
D:\software\Anaconda3\envs\py312\python.exe检查 Python 版本:
python --version例如:
Python 3.12.x还可以查看包:
conda list如果原环境安装了 NumPy,可以进一步测试:
python -c "import numpy; print(numpy.__version__)"如果都正常,说明迁移成功。
py313也可以采用同样方式测试:
conda activate D:\software\Anaconda3\envs\py313 where python python --version12. 确认正常后删除 C 盘旧环境
注意:
一定要确认 D 盘新环境可以正常使用后,再删除 C 盘环境。
首先退出当前环境:
conda activate base删除旧的 py312:
conda remove --prefix C:\Users\Lenovo\.conda\envs\py312 --all删除旧的 py313:
conda remove --prefix C:\Users\Lenovo\.conda\envs\py313 --all然后再次:
conda env list最终理想状态为:
# conda environments: # base * D:\software\Anaconda3 py312 D:\software\Anaconda3\envs\py312 py313 D:\software\Anaconda3\envs\py31313. PyCharm 中找不到 Conda 环境怎么办?
即使 Conda 环境已经创建成功,PyCharm 也不一定能够自动搜索出来。
这种情况下,不需要纠结 PyCharm 为什么没有自动识别,直接手动指定 Python 解释器即可。
进入:
File → Settings → Project → Python Interpreter → Add Interpreter → Add Local Interpreter选择已有环境,然后找到:
D:\software\Anaconda3\envs\py312\python.exe或者:
D:\software\Anaconda3\envs\py313\python.exe选择即可。
如果 PyCharm 还要求指定 Conda executable,可以使用:
D:\software\Anaconda3\Scripts\conda.exe可以通过下面命令确认:
where conda14. 常用排查命令汇总
查看所有 Conda 环境
conda env list查看 Conda 详细信息
conda info重点关注:
base environment package cache envs directories administrator查看虚拟环境默认目录
conda config --show envs_dirs查看 Conda 配置文件来源
conda config --show-sources查看当前调用的是哪个 Conda
where conda查看当前 Python
where python查看 Python 版本
python --version15. 本次问题的核心原因
整个问题实际上包含两个不同层面。
问题一:为什么环境创建到了 C 盘?
因为 Conda 可以配置多个环境目录:
D:\software\Anaconda3\envs C:\Users\Lenovo\.conda\envs C:\Users\Lenovo\AppData\Local\conda\conda\envs虽然希望优先使用 D 盘,但当前 Windows 用户对:
D:\software\Anaconda3\envs没有写权限,因此 Conda 使用了用户目录中的:
C:\Users\Lenovo\.conda\envs问题二:为什么 clone 时出现 WinError 5?
错误:
PermissionError: [WinError 5] 拒绝访问本质是 Windows 文件权限问题。
特别是:
base environment : D:\software\Anaconda3 (read only) administrator : False说明当前普通用户不能修改 Anaconda 安装目录下的部分文件夹。
解决方法不是重装 Conda,而是给:
D:\software\Anaconda3\envs和:
D:\software\Anaconda3\pkgs适当的修改权限。
16. 最终推荐的 Conda 目录结构
最终建议保持:
D:\software\Anaconda3 │ ├─ python.exe │ ├─ Scripts │ ├─ Library │ ├─ pkgs │ └─ envs │ ├─ py312 │ ├─ py313 │ ├─ pytorch │ └─ 其他环境即:
base: D:\software\Anaconda3 虚拟环境: D:\software\Anaconda3\envs\环境名 包缓存: D:\software\Anaconda3\pkgs这样 Anaconda 主程序、包缓存、虚拟环境全部集中在 D 盘,不会不断占用系统盘 C 盘。
17. 最简解决流程
如果以后再次遇到类似问题,可以直接按下面顺序排查。
首先:
conda info检查:
envs directories base environment administrator然后设置:
conda config --prepend envs_dirs D:\software\Anaconda3\envs管理员 CMD 中授权:
icacls "D:\software\Anaconda3\envs" /grant Lenovo:(OI)(CI)M /T icacls "D:\software\Anaconda3\pkgs" /grant Lenovo:(OI)(CI)M /T迁移旧环境:
conda create --prefix D:\software\Anaconda3\envs\py312 --clone C:\Users\Lenovo\.conda\envs\py312测试:
conda activate D:\software\Anaconda3\envs\py312 where python python --version确认正常后删除旧环境:
conda activate base conda remove --prefix C:\Users\Lenovo\.conda\envs\py312 --all最后:
conda env list确认所有环境均位于:
D:\software\Anaconda3\envs即可。
总结
如果 Anaconda 明明安装在 D 盘,而 Conda 虚拟环境却不断出现在:
C:\Users\用户名\.conda\envs不要第一时间认为 Anaconda 安装错误。
重点检查:
conda info尤其是:
envs directories以及 D 盘目标目录是否具有写权限。
如果出现:
PermissionError: [WinError 5] 拒绝访问首先考虑 Windows 权限,而不是重新安装 Anaconda。
对于已有环境,也不要直接剪切整个环境目录,优先使用:
conda create --prefix 新路径 --clone 旧路径完成迁移后,再在 PyCharm 中手动指定:
新环境目录\python.exe即可。