WSL运行Python报ModuleNotFoundError: No module named 'PIL'
问题根因
PyCharm运行脚本时调用的是Windows主机侧的Python解释器,你安装的Pillow、wordcloud等依赖都部署在Windows的Python环境中。执行wsl ./Test.py时,脚本实际运行在WSL独立的Linux子系统环境内,两套环境的解释器、第三方依赖完全隔离,WSL环境中未安装Pillow(导入名为PIL)包,就会触发模块不存在的报错。
解决步骤
- 进入WSL子系统终端
在PowerShell中执行wsl命令,进入Linux子系统的命令行环境。 - 确认WSL内的Python环境
依次执行以下命令,确认当前默认的Python3、pip3路径和版本,避免后续依赖装到错误的环境里:which python3 python3 --version which pip3 - 安装缺失依赖
先升级pip避免安装过程出现版本兼容问题,再安装脚本需要的Pillow和wordcloud包:
如果你用的是Ubuntu/Debian系WSL发行版,安装Pillow时出现编译报错,可以先执行pip3 install --upgrade pip pip3 install pillow wordcloudsudo apt update && sudo apt install python3-pil安装系统源预编译的Pillow依赖,再执行pip安装命令即可。 - 验证脚本运行
安装完成后,在WSL终端内切换到Test.py所在路径:Windows磁盘在WSL中默认挂载在/mnt/路径下,比如原Windows路径C:\Users\xxx\Test.py对应的WSL路径是/mnt/c/Users/xxx/Test.py。切到对应目录后执行python3 ./Test.py,确认脚本可以正常运行。
如果需要直接在PowerShell中通过wsl命令启动脚本,要写WSL格式的完整路径,示例:wsl python3 /mnt/c/Users/xxx/Test.py
常见避坑说明
- 不要尝试直接复用Windows侧的Python虚拟环境或者第三方包到WSL中,Windows平台编译的二进制包和Linux环境不兼容,会触发各类导入、运行错误。
- 如果你在PyCharm中用的是venv或者conda虚拟环境,WSL侧也需要单独创建独立的Linux虚拟环境,在虚拟环境内安装对应依赖后再运行脚本,不要和系统Python的包混装。
内容的提问来源于stack exchange,提问作者Bruno Ribeiro
相关产品推荐
相关产品推荐

