我看过很多文章(见1 2 3)寻址如果对于PATH
环境变量中的条目来说,顺序很重要,答案显然是肯定的是的.但我不明白为什么这应该很重要。
如果PATH
用于解析程序的位置,那么我们当然希望在使用它时将一个程序映射到一个目录。但是,如果是这样的话,我们就永远不需要重新排序变量中的条目PATH
;每个可执行文件都应该有一个目录位置,因此操作系统只需翻阅条目,直到找到匹配项。
但是我最近安装了一个 python 模块,它直到我将一个条目放在另一个现有条目之前才起作用PATH
。无论使用我的新条目现在位于其前面的条目的是什么,显然都会搜索相同的程序,否则就不会出现与单个程序冲突的条目问题。
如果我重新排序条目以解决冲突,那么我肯定会产生另一个冲突;如果我的新程序在遇到旧PATH
条目时失败,那么旧程序现在肯定会在遇到我的新条目时失败。如果不是,那么我当然可以删除旧条目,这样就不会出错。但是如果我们删除旧条目,那么就不会有冲突,所以顺序并不重要。
你明白我的意思吗?我在这里绕圈子了。
答案1
PATH 顺序至少有两个原因:
- 如果资源,例如DLL 有两个不同版本,但名称相同,则将找到路径中第一个,而不是第二个。程序可能只使用一个特定的 DLL,也可能同时使用两个 DLL。
- PATH 中的错误条目会导致所有后续条目失败。如果非法条目位于末尾,则不会出现问题……但如果移得更早,则会导致其他条目无法正常工作。
问题 1 的解决方法是将旧版 DLL 放在与可执行文件相同的文件夹中。PATH 有点不方便。
如果其他人想补充这个原因列表,请随意添加。