WSL(Windows Subsystem Linux)环境下shebang失效无法直接运行Python脚本
问题成因与解决方案
该问题和WSL本身与原生Ubuntu的差异关联不大,基本都是操作遗漏或跨系统文件格式问题导致,核心排查方向如下:
核心成因
- 缺少可执行权限:Linux 环境下所有直接执行的文件都需要可执行权限,默认创建的Python脚本只有读写权限,没有执行权限。
- 换行符格式错误:WSL场景下如果脚本是在Windows端编辑器创建/修改,默认会用Windows的CRLF(\r\n)换行,shebang行末尾会携带不可见的
\r字符,导致系统无法识别正确的解释器路径,触发command not found报错。 - 运行方式不符合规范:直接输入
test_file.py运行时,系统只会在PATH环境变量指定的路径下搜索命令,当前工作目录默认不在PATH中,无法找到对应脚本。
解决步骤
给脚本添加可执行权限:
进入项目根目录后执行:chmod +x src/test_file.py运行时必须携带路径前缀,若当前处于src目录下执行:
./test_file.py若处于项目根目录执行:
./src/test_file.py转换换行符为Unix格式:
先验证换行符格式,执行:cat -A src/test_file.py如果第一行末尾显示为
python3^M$,说明是CRLF换行,安装转换工具后转换格式:sudo apt update && sudo apt install -y dos2unix dos2unix src/test_file.py虚拟环境适配优化:
不要将shebang改为固定的#!/usr/bin/python3,保留#!/usr/bin/env python3即可,该写法会自动优先调用当前激活的虚拟环境中的Python解释器,符合虚拟环境的使用逻辑。
验证方法
完成上述操作后,先激活虚拟环境执行which python3,确认返回路径为项目下environment/bin/python3,再运行脚本即可正常输出内容。
内容的提问来源于stack exchange,提问作者Myn13
相关产品推荐
相关产品推荐

