这不是python bug,而是操作系统拒绝写入目标目录;常见于将venv建在/usr/local/或c:\program files\等受保护路径,或目录归属非当前用户,解决关键是确保目标路径可写且归属正确。

python -m venv 报 PermissionError: [Errno 13] 是路径权限问题
这个错误不是 Python 本身出错,而是操作系统拒绝你往目标目录写入文件。最常见的情况是:你试图把虚拟环境建在系统受保护路径(如 /usr/local/、C:\Program Files\)或别人创建的、归属不归你的目录里。
比如执行 python3 -m venv /usr/local/myenv 或 python -m venv C:\Program Files\myproject\venv,几乎必报错 —— 这些位置默认只允许 root 或 Administrator 写入。
关键判断点:ls -ld ~/myapp/env188(Linux/macOS)或 dir C:\path\to\env(Windows)看目录归属和权限。如果显示 owner 不是你,或权限里没有 w(Linux/macOS)或“写入”勾选(Windows),就坐实了。
创建前必须确保目标目录可写且归属正确
别跳过这步直接跑 venv。先手动确认并修复目录权限:
- 用
mkdir -p ~/myproject/venv创建路径(不要加sudo) - 检查归属:
ls -ld ~/myproject,输出中第一列应是你的用户名,不是root或其他用户 - 如果不是,运行
chown -R $USER:$USER ~/myproject(Linux/macOS);Windows 用户右键目录 → “属性” → “安全” → 编辑当前用户的“完全控制”权限 - 避免路径含空格或中文(尤其 Windows 下
Program Files后面带空格极易触发隐性权限失败)
venv 创建时仍报错的典型陷阱
即使目录看着没问题,以下情况仍会触发 [Errno 13]:
- 父目录被挂载为
noexec或nosuid(如某些 Docker 卷、加密 home 目录)—— 检查mount | grep $(dirname ~/myproject) - 杀毒软件或企业策略拦截了 Python 的文件创建行为(Windows 常见),临时禁用试试
- 你在 WSL 中用了 Windows 文件系统路径(如
/mnt/c/Users/xxx/project),NTFS 权限映射不稳定,务必改用 Linux 根路径(如~/project) -
venv命令本身被 alias 成带sudo的版本(检查alias python3或which python3是否指向异常路径)
实在不行,换 conda 或重装 Python 到用户目录
如果你反复踩坑、又不能切系统权限,说明当前 Python 安装方式不适合你:
- conda 自带环境隔离逻辑,对系统目录依赖更少,
conda create -n myenv python=3.11往往能绕过 venv 的权限校验链 - 重新下载 Python 官方 installer,安装时**取消勾选 “Install for all users”**,选择 “Install just for me”,路径自动落到用户目录下,后续所有
venv都天然免权限问题 - 别用系统包管理器装的 Python(如 Ubuntu 的
apt install python3),它常绑定到/usr/bin/python3,连带venv也倾向往系统路径写
真正卡住的点往往不在命令本身,而在你没意识到:Python 解释器的安装位置,已经决定了你后续所有环境操作的权限天花板。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











