前景提要
刚刚遇到了一个比较低级的错误,一时没反应过来。现把解决的过程简单分享一下。
问题
执行一个 python 的脚本,提示找不到模块。
环境条件 ubuntu 20.04 。 机器很久没有重装,也没有特别大的改动。 期间没有卸载过任何依赖包。 依赖包来自 apt 。LTS 仓库稳定,突然不能跑的概率较低。
表现
执行之前有效的脚本,突然提示找不到模块。使用 pip 安装,提示路径不可写。 提示的路径是 flexget 或 youtube-dl 的路径(视 $PATH 中的顺序) 。
检查
输入 which pip3 命令,发现 pip 在 flexget/bin 里。继续使用 which python3 检查,它也在 flexget/bin 里。
在 python 中打印 sys.path ,与另一用户的结果不同,且包含 flexget/bin 的内容。
原因
此时回想前几天的操作可知。先前模仿安装 flexget 的方法,为机器安装了最新的 youtube-dl 。 之后为了图方便,把二者的 bin 目录加入了 $PATH 里 。
修复
去掉 $PATH 中后来增加的内容,重新检查后,一切恢复正常。
在 ~/.local/bin 中建立 flexget 和 youtube-dl 的符号链接来实现相同目的。
总结
遇到类似奇怪的问题,先执行 which 命令,看看到底是不是自己想要运行的程序。如果是路径的问题,修正路径后,问题可能就解决了。
另外,通过 python3 -m venv 独立安装的软件,如果需要快速调用,不应直接添加 $PATH ,而是在已有的 $PATH 所指向的目录里添加符号链接。