寻找Python2.7启动时执行的脚本位置
Python 2.7 启动时初始化模块的源码位置
你要找的Python启动阶段自动导入模块的逻辑,主要分布在两个核心区域:
一、内置模块的初始化(C代码部分)
标注为builtin的模块(比如errno、posix、_sre),是解释器启动时通过C代码直接初始化的,对应源码位置:
- 单个模块的实现文件:
Modules/目录下的errnomodule.c、posixmodule.c、_sre.c等 - 核心初始化入口:
Python/pythonrun.c中的_PyImport_Init()等函数,负责启动时加载核心内置模块
二、标准库模块的导入(Python代码部分)
site、os、linecache这类模块的导入逻辑,主要在这两处:
Lib/site.py:Python启动时会自动执行该脚本,它会触发os、warnings、linecache等一系列标准库模块的导入- C层面的导入触发:像
zipimport这类模块,是在Python/import.c的_PyImport_Init()函数中,通过PyImport_ImportModule("zipimport")调用完成加载的
延迟加载的修改建议
如果要将import linecache这类语句替换为linecache = lazy_import.lazy_module("linecache"):
- 对于
site.py中的导入,直接修改Lib/site.py里的对应导入代码即可 - 对于C代码中触发的导入,需要找到对应的
PyImport_ImportModule调用,替换为自定义的懒加载逻辑(可以通过C实现,也可以在Python层面借助懒加载工具处理)
注意:部分核心模块是解释器正常运行的依赖,直接延迟加载可能引发异常,建议先单独测试单个模块的影响后再批量修改
内容的提问来源于stack exchange,提问作者got here
相关产品推荐
相关产品推荐

