Anaconda 安装在 D 盘但虚拟环境跑到 C 盘,以及 Conda PermissionError: WinError 5 的解决方法

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

即可。

相关推荐
“AI国潮设计-小江”1 小时前
[AIGC实战] 基于Stable Diffusion的潮汕非遗IP自动化生成工作流(附Python批量处理脚本)
开发语言·人工智能·python·prompt·aigc
布莱克6052 小时前
在C++中,构造函数能不能是虚函数?析构函数为什么要虚?
开发语言·c++·构造函数·析构函数·虚函数
落魄实习生2 小时前
Agent Scope Java 2.x 系列【1】核心架构
java·开发语言·架构
一水鉴天2 小时前
三套语言:STL SPL/ SQL 20260928(元宝)
开发语言
Sarvartha2 小时前
数组基础知识
java·开发语言
泡海椒2 小时前
金融报表开发:jquick-pdf K 线图 PDF 可视化解决方案
java·开发语言·金融·pdf
孙启超2 小时前
【AI开发之Rust】第 17 课:项目总览与核心架构 —— AI 助手 Rust 核心从 0 到 1
开发语言·后端·rust
心中有你02143 小时前
C语言 二叉搜索树(BST)超详细完整实现(插入+查找+删除+三种遍历+内存释放)
c语言
码匠许师傅3 小时前
【C++三方组件】Asio 上篇:回调式 TCP 客户端与服务端
开发语言·c++·tcp/ip