Python import module 源码处理逻辑简记

来源:互联网 发布:数据对接的接口及方式 编辑:程序博客网 时间:2024/06/13 12:56

总的入口是load_module

导入的文件存在py文件,走load_source_module

1. 获取py文件最新时间

2. 尝试打开pyc,打开失败,则重新编译,打开成功,从pyc里面取出magic和时间戳,有一个不一样,就重新编译pyc。如果都一样,则从pyc读取代码段。

3. pyc打开或者magic、时间戳校样失败,则重新编译pyc。

    3.1 对py文件进行AST解析,返回PyCodeObject,先通过open打开pyc,在open的文件描述通过fdopen转换成文件操作指针,之后,依次写入magic、timestamp、code。

4. 执行代码

    4.1 代码来自从pyc读取的代码

    4.2 代码来自对py进行AST返回之后的代码

导入的模块不存在py,只有pyc文件。走load_compiled_module

0 0