Linux下用sudo运行.py文件触发Errno 13权限拒绝问题求助
解决sudo运行Python脚本时的Errno 13权限问题
核心排查与修复步骤
你提到所有Python脚本用sudo运行都触发权限错误,这并非单个脚本或keyboard模块的问题,大概率是sudo环境下的Python路径/权限配置异常,按以下步骤逐一排查:
1. 验证sudo与普通用户的Python路径差异
sudo默认会重置PATH到系统安全路径,可能导致调用的Python解释器和你预期的不一致:
- 查看普通用户的Python路径:
which python3 - 查看sudo环境下的Python路径:
sudo which python3 - 如果两者路径不同,直接用完整路径运行脚本测试:
(把sudo /usr/bin/python3 your_script.py/usr/bin/python3换成你普通用户的Python路径)
2. 调整sudoers的secure_path配置
sudo的secure_path会限制可执行文件的搜索路径,若你的Python解释器不在默认路径里,就会触发权限类错误:
- 用
visudo编辑sudoers文件(必须用这个命令,避免语法错误锁死sudo):sudo visudo - 找到
Defaults secure_path行,将你的Python解释器所在路径追加进去,比如:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/your_user/.local/bin" - 保存退出后重新测试脚本。
3. 检查Python安装目录的权限
如果你的Python是用户级安装(比如用pip install --user),root用户可能无法访问该目录:
- 查看Python安装前缀目录:
python3 -c "import sys; print(sys.prefix)" - 给该目录添加全局读权限:
sudo chmod -R o+rX $(python3 -c "import sys; print(sys.prefix)")
4. 针对keyboard模块的额外验证
虽然所有脚本都报错,但仍需确认模块的安装位置:
- 查看
keyboard模块路径:python3 -c "import keyboard; print(keyboard.__file__)" - 如果模块在用户目录下,sudo运行时可能无法加载,用root身份重新安装:
sudo pip3 install keyboard --force-reinstall
5. 用最小脚本验证环境
写一个极简脚本test.py:
print("Test sudo Python execution")
用sudo python3 test.py运行,若仍报错,说明问题完全在Python的sudo环境配置,与keyboard模块无关。
内容的提问来源于stack exchange,提问作者Sashank Bhagavatula
相关产品推荐
相关产品推荐

