permissionerror: [errno 13] permission denied 表示当前用户无目标目录的读、写、执行权限,常见于在系统保护路径(如/usr/local/、c:\program files\)创建虚拟环境;根本解决法是将venv建在用户有完全控制权的路径(如~/myenv或.venv),严禁使用sudo创建,避免属主混乱与后续权限连锁问题。

PermissionError: [Errno 13] Permission denied 是什么情况
这通常不是 Python 本身没权限,而是你试图在系统保护目录(比如 /usr/local/bin、/opt/ 或其它非用户可写路径)里创建 venv。Python 的 venv 模块需要对目标目录有读、写、执行权限——缺一不可。
常见触发场景:
• 直接运行 python -m venv /usr/local/myenv
• 在 Docker 容器里以 root 外的用户身份操作但挂载了只读卷
• 使用某些 IDE 自动推荐路径(如项目根目录被设为只读)
怎么快速绕过权限问题(不加 sudo)
根本原则:把 venv 创建在你有完全控制权的路径下,比如家目录或项目子目录。不要硬刚系统路径。
- 用相对路径创建:
python -m venv .venv(当前目录下建.venv,最安全) - 显式指定家目录:
python -m venv ~/myproject_env - 确认目标路径可写:
ls -ld ~/myproject_env或touch ~/test && rm ~/test - 如果项目在 NFS 或网络盘上,检查挂载选项是否含
noexec或nosuid——这些会阻止 venv 执行初始化脚本
为什么不能用 sudo python -m venv
能跑通,但后果严重:
- 生成的
pip、python可执行文件属主是 root,后续每次pip install都要 sudo,破坏隔离性 - 激活后
which python返回的是 root 权限路径,IDE 或 shell 可能缓存错误权限上下文 - 不同用户共享同一 venv 时,权限混乱,
pip list可能报Permission denied读取site-packages - macOS 上还可能触发 SIP 保护,导致
activate脚本无法修改PYTHONPATH
Windows 上提示“拒绝访问”怎么办
Windows 的错误信息更模糊,但根源类似:
- 目标路径在受控文件夹(如
C:\Program Files\),UAC 阻止写入 - 杀毒软件锁定
Scripts\下的python.exe或pip.exe(尤其 McAfee、FortiClient) - 路径含中文或空格,某些旧版 Python 解析失败(建议用短英文名 + 无空格)
- 试试:
python -m venv .venv --without-pip,再手动下载get-pip.py运行(避开初始 pip 初始化阶段)
真正麻烦的从来不是“怎么建成功”,而是建完之后谁在用、在哪用、会不会被别的工具悄悄改权限。多看一眼 ls -l .venv/bin/(Linux/macOS)或 dir .venv\Scripts\(Windows)的属主和权限位,比反复重试有用得多。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











