Ubuntu20.04虚拟环境pip安装报[Errno13]权限拒绝错误
问题根因
报错中提到的zipp.py不存在属于正常现象:权限拒绝发生在pip尝试将缓存中的安装包写入site-packages目录的环节,文件尚未成功创建就被系统权限拦截,因此你在目录下找不到对应文件。
核心故障原因是虚拟环境目录归属权限配置错误:该虚拟环境位于/var/www路径下,大概率创建时误用了sudo执行创建命令,导致虚拟环境内目录与文件的所有者为root,当前登录的普通用户无目录写入权限,无法完成新包安装。
修复步骤
- 执行
deactivate退出当前已激活的虚拟环境,回到系统shell。 - 递归修正整个虚拟环境目录的所有者,将权限交还给当前操作用户:
sudo chown -R iamurray:iamurray /var/www/flask-prod/flask-prod-venv/针对Apache WSGI部署场景的提示:Apache默认运行用户为
www-data,不需要将虚拟环境所有者修改为www-data,上述命令执行后默认保留的其他用户读、执行权限完全满足mod_wsgi的运行要求,将虚拟环境所有者设为服务运行用户会引入不必要的安全风险。 - 重新激活虚拟环境,校验pip路径是否指向虚拟环境内部:
正常返回路径应为source /var/www/flask-prod/flask-prod-venv/bin/activate which pip3/var/www/flask-prod/flask-prod-venv/bin/pip3,若返回系统路径(如/usr/bin/pip3)说明虚拟环境未正确激活。 - 重新执行安装命令即可完成依赖安装:
pip3 install flask
部署注意事项
- 后续在虚拟环境内安装依赖时,禁止加sudo执行,否则新安装的文件所有者会变回root,再次触发同类权限报错。
- 不要为了省事给site-packages目录设置777权限,过大的权限会允许任意用户写入执行代码,存在严重安全隐患,正确的所有者配置即可同时满足安装、运行需求。
- 所有依赖安装完成后,可执行
ls -l /var/www/flask-prod/flask-prod-venv/lib/python3.8/site-packages/校验文件归属,确认无root所有的包文件即可。
内容的提问来源于stack exchange,提问作者Ian Murray
相关产品推荐
相关产品推荐

