最近在搞一个Whisper开源模型的懒人包,发现它在中文路径下运行时会报错(报错内容截取不了了,因为在我修好这个bug后,我想复现这个bug它却神奇消失了)
debug时的截图:
经过漫长的debug,发现问题出在这个whisper-scripy.py
文件,它的开头有一行乱码,应该是pip在安装时没有转译好中文而造成的。(理想情况下这里应该显示的是D:\人工智能项目\whisper-webui\....
)
解决方法
把这一段乱码改成正常路径就好
我的情况就是把它改成D:\人工智能项目\whisper-webui\....
推测
debug过程中积攒了很多疑问
- 程序在执行的时候会读取这个py文件,但是作为一个py文件其本身就是一个命令执行者,为什么要被视为一个文本对象被其他py文件读取?是作者的编写不规范还是我知识不足?
- 从这行注释的内容来看,它似乎是在指定python解释器的位置
#!D:\人工智能项目\whisper-webui\python\python.exe -x
- Whisper项目如果直接移动其他目录,会出现无法运行的情况,命令行执行:
whisper
→ \rightarrow →报错:failed to create process.
。原因是whisper.exe中保存了先前的python解释器的位置,项目移动后,whisper.exe找不到python解释器,就会无法执行。解决方法是在命令前面加上python -m
,也就是这么写:
python -m whisper D:\music\Anna.mp3 --model small
- 该方法受启发自pip,因为pip在移动了python环境后也会出现无法运行的情况。
- 在未发现这个乱码之前,我把项目移动到全英文的目录底下,发现程序没有报错。但是,如果报错是由
whisper-scripy.py
引起的,而程序每次执行都会读取whisper-scripy.py
,我又没有修改whisper-scripy.py
里的乱码,那么就算在英文路径底下它也应该报错的才对。 - 在我写这篇文章的时候,我把
whisper-scripy.py
恢复回了之前乱码的样子,想要复现之前的报错,却发现报错神奇地消失了。也就是说这个whisper-scripy.py
只会被读取一次,那么合理的猜测就是它用于进行初始化。
哎,头疼