技术解析

分享一个有关路径设置的低级错误
0
2021-06-16 17:14:03
idczone

刚刚遇到了一个比较低级的错误,一时没反应过来。现把解决的过程简单分享一下。

问题

执行一个 python 的脚本,提示找不到模块。

环境条件

  1. ubuntu 20.04 。
  2. 机器很久没有重装,也没有特别大的改动。
  3. 期间没有卸载过任何依赖包。
  4. 依赖包来自 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 所指向的目录里添加符号链接。




数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服