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中包含的目录中就行了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!