为什么 Python 的 shutil.which() 不起作用?

Why is Python's shutil.which() not working?

我正在尝试查看 shutil.which() 是否可以从 NCBI 的 BLAST 中找到 blastn 命令。 运行 which blastn 在我的终端上的结果是 /usr/local/bin/blastn。但是,如果我做 shutil.which("blastn"),它只是 returns None。搜索 Python 效果很好,因为 shutil.which("python") returns /usr/bin/python。为什么会这样?

这意味着您的 shell 中的环境与 Python 运行时中的环境具有不同的 PATH。可能的原因有很多,但通常会发生,因为 .bashrc 中的某些内容附加到 PATH,这将在 shell 中看到,但不会被 Python.

看到

检查shell中的环境:

$ echo $PATH

检查Python中的环境:

import os
print(os.environ["PATH"])

您可能会发现 shell 的环境在 PATH 中有 blastn 的位置,而 Python 的没有。