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\envs
Conda 创建环境时,会选择优先级较高并且当前用户具有写权限的目录。
因此,即使 Anaconda 安装在:
D:\software\Anaconda3
如果普通 Windows 用户无法写入:
D:\software\Anaconda3\envs
Conda 就可能自动退回到:
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\test
4. 迁移已有 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_write
8. 重新迁移 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\py313
10. 检查环境是否迁移成功
执行:
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 --version
12. 确认正常后删除 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\py313
13. 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 conda
14. 常用排查命令汇总
查看所有 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 --version
15. 本次问题的核心原因
整个问题实际上包含两个不同层面。
问题一:为什么环境创建到了 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
即可。