Python import/from...import搜索顺序:先当前工作目录还是sys.path?
Python模块导入路径优先级问题解答
咱们先把第一个问题掰明白:Python里的import(包括from ... import ...这类语句),默认情况下是先搜索当前工作目录(CWD),再去sys.path里的其他路径查找。为啥这么说?因为默认的sys.path列表里,第一个元素是空字符串'',这个空字符串对应的就是当前工作目录——相当于Python把当前工作目录默认放在了搜索路径的最优先级位置。
再看第二个问题:from [...] import [...]语句的行为对应的是cwd first(先搜索当前工作目录,再搜索sys.path路径)。
结合你给的几个示例脚本,咱们再加深理解:
- 修改路径脚本:你用
sys.path.insert(0, 'E:\demo_dir\example_dir\eg_dir\test_dir\')把目标目录插到了sys.path的最前面,这时候它的优先级就超过了默认的当前工作目录(空字符串),所以from src import name会先从这个插入的目录里找src模块,之后再恢复sys.path。 - 修改工作目录脚本:你把当前工作目录切换到了目标目录,这时候
sys.path里的空字符串就指向了这个新目录,所以from src import name会优先从这个新的当前工作目录里找模块,最后再切回原来的工作目录。
内容的提问来源于stack exchange,提问作者Toothpick Anemone
相关产品推荐
相关产品推荐

