Python的Import机制

一.import 如何工作

在Python中,导入并非是把一个文件文本插入另一个文件,导入实际上是运行时的运算。 当程序第一次导入指定文件时,会执行以下三个步骤:
  1. 找到模块文件
  2. 编译成位码(即.pyc文件)
  3. 执行模块的代码来创建其所定义的对象

关于搜索

Python会在先后在下面四个路径查找
  1. 程序的主目录
  2. PYTHONPATH目录
  3. 标准链接库目录
  4. 任何的.pth文件的内容
  5. sys.path来查看以上四个路径的集合

关于编译成位码

1.在模块导入时,会生成一个.pyc文件。
2.Python会自动检查文件的时间戳,来判断需不需要重新生成字节码.
3.如果Python在搜索路径上只发现了字节码文件,而没有源代码,就会直接加载字节码。(这意味着我们可以把一个程序只作为字节码发布,而避免发送源代码)

关于执行

import操作最后的步骤是执行模块的字节码。如果模块中有print语句就会显示输出.

二.模块包

1.除了模块名以外,导入也可以指定目录路径。Python代码的目录就称为包.
2.包导入语句的路径中的每个目录内都必须有__init__.py文件。
例如这样的目录结构: dir0\dir1\dir2\mod.py

必须遵循以下规则:

  • dir1和dir2中都必须含有一个__init__.py文件
  • dir0是容器,不需要__init__.py文件;如果有也会被忽略
  • dir0必须在模块搜索路径上(即sys.path中)
3.包的初始化
  • Python首次导入某个目录时,会自动执行该目录下__init__.py文件中的所有程序代码(在交互式环境下,只有第一次import会执行;直接编译文件的方式,每次都会执行__init__.py)。
  • 一般我们可以把连接数据库的操作放在__init__.py文件中。

三.相对导入和绝对导入

  • 通过from . import 来实现相对导入,不带.则会直接在sys.path中的路径中查找
  • .表示当前目录,..表示上一级目录
  • 程序的入口所在的那一层目录不能被视作包
  • 相对导入只能在包中使用,即程序入口那一层不能使用相对导入
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值