python 模块搜索路径

前言

    当我们import os的时候,Python解释器去哪找os模块呢?如果多处都有os模块,选择哪个os模块呢?

去哪找os模块?

    Python解释器不是很神奇,它会从以下2个地方找os模块

1、内置模块

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

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

2、sys.path属性中的所有目录中,是个list,会有很多个目录

sys.path,由哪些目录组成?

  • 执行脚本程序的当前工作目录
  • PYTHONPATH 环境变量,是个包含所有目录名称的列表,和shell变量 PATH 有一样的语法
  • python解释器安装的默认设置,标准库目录在此

查找搜索路径过程

import baby

1、同名的内置模块(有些模块并不在标准库目录中,属于内置模块,比如sys模块,用c语言写的……)

2、从 sys.path 所有的目录列表中,逐个查找每个目录,查找名为baby的模块,不一定是.py文件

没有找到模块怎么办?

1、没有找到,会抛出ImportError

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

最后说下模块分类

1、内置模块

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

2、标准库模块

包括内置模块

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

3、第三方模块

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

4、自己写的模块

你自己写的.py模块

总结-再也不怕找不到模块了吧

    python解释器查找模块的过程,如果能熟练掌握的情况,你就再也不怕ImportError这个讨厌的错误,如果大家不理解,建议再读一遍,同时作以下练习,看看模块搜索路径都有,你要找的模块在不在这些目录中呢?

import sys

print(sys.path)

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 06:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 06:10:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 06:10:02       82 阅读
  4. Python语言-面向对象

    2024-01-07 06:10:02       91 阅读

热门阅读

  1. A2DP Source如何从android系统拿到音频数据

    2024-01-07 06:10:02       56 阅读
  2. Docker Zookeeper 安装 简单教程

    2024-01-07 06:10:02       56 阅读
  3. 知名云计算项目实施体系资料合集

    2024-01-07 06:10:02       54 阅读
  4. Web前端篇——ElementUI的Backtop 不显示问题

    2024-01-07 06:10:02       65 阅读
  5. linux mv command and authority managemet

    2024-01-07 06:10:02       55 阅读
  6. 文心一言实战大全

    2024-01-07 06:10:02       59 阅读
  7. pyparamvalidate 重构背景和需求分析

    2024-01-07 06:10:02       56 阅读
  8. go 语言中的别名类型

    2024-01-07 06:10:02       55 阅读
  9. LightGlue-OpenCV 实现实时相机图片特征点匹配

    2024-01-07 06:10:02       61 阅读