python 模块搜索路径

前言

    当我们import os的时候,Python解释器去哪找os模块呢?如果有多处都有os模块,Python解释器使用哪个os模块呢?这是一个重要的知识点:模块搜索路径

    当python解释器找到对应的模块后,将不会再继续查找。举个小栗子:就像你寻找你的另一半,当你找见1个匹配的人,你也不会再继续找了,程序来源于生活嘛

去哪找os模块?

    Python解释器会从2个地方找os模块,它们是:内置模块和sys.path中的每一个目录

1、内置模块

sys.builtin_module_names会返回所有的内置模块

土办法:也可以利用内置属性__path__或者__file__,一般该属性有值的都不是内置模块 

2、sys.path属性中的所有目录中,是个list,会有很多个目录,去每个目录中查找模块文件

sys.path中的目录主要由3部分共同组成

1、执行程序的当前工作目录

比如 python hello.py ,你可以使用pwd看下你的当前工作目录是什么(Linux)

2、PYTHONPATH

环境变量PYTHONPATH,它是个包含所有目录名称的列表,和shell变量 PATH 有一样的语法,它包含的每个目录会拼接到sys.path的list中

3、python解释器安装的默认设置

标准库目录,比如lib目录在此

搜索模块的过程

import baby

1、最先从内置模块中查找(有些模块并不在标准库目录中,属于内置模块,比如sys模块),如果找不到,会继续从sys.path中的每个目录中进行查找

2、继续从 sys.path 所有的目录列表中,会逐个查找每个目录,查找baby模块,找到就不会再就行查找了

3、没找到模块或者模块导入时报错会发生什么?

如果没有找到模块,会抛出ImportError

找到的模块本身异常,会抛出ImportError

Python的模块分类,主要是4个

1、内置模块

sys.builtin_module_names会返回所有的内置模块

2、标准库模块

包括内置模块

标准库模块位于Python安装目录下的`Lib`文件夹中

3、第三方模块

一般都是通过pip install xx 安装的模块

4、自己写的模块

你自己写的.py模块

总结

    python解释器查找模块的过程,如果能熟练掌握的情况,就再也不怕ImportError这个讨厌的错误,记住python搜索模块的规则:

1、python先找内置模块

2、找不到,会再找sys.path下的每一个目录

    如果还是有ImportError的错误,考虑将模块文件添加到sys.path中包含的目录中就行了。

你可能感兴趣的:(Python,综合,python,开发语言)