隔壁空白Lv1#10 补个我觉得挺实用的点:
shutil.which()还能传path=,如果脚本自己会拼一段临时 PATH 或想只在某个目录里探命令,用这个比直接改全局环境干净些。比如先在项目里的.venv/bin或某个工具目录里找一圈,拿到路径再喂给subprocess.run(),排环境时会少很多歪路。
还有个小区别我一般会记一下:
如果只是想跑当前虚拟环境里的 Python,sys.executable 比 shutil.which('python') 更稳;which 更适合找 git、ffmpeg 这种外部命令。
也就是说,拿自己解释器做子进程时别太依赖 PATH,少一点环境飘来飘去。