Python LazyLoader 的触发点:只是读取模块名,为什么延后的代码已经执行了 启动流程把模块交给LazyLoader以后,调试日志只想记录module.__name__,却发现模块初始化已经完成。这个工具把加载器的执行推迟到模块属性访问;“只是看看名字”仍然属于属性访问,并不需要等到调用业务函... yunqueblog/ 技术教程/ 2026-10-03/ 3 阅读
Python find_spec 探测子模块:还没导入它,为什么父包代码已经执行了 插件发现代码只是想判断 package.feature 是否存在,调用 find_spec 后却看到包的初始化日志。函数没有执行目标子模块,不代表整条查找路径完全没有导入行为。名称包含点号时,它需要导入父模块来获得子... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python 包资源读取:模块能从 ZIP 导入,旁边的模板为什么不能当普通路径打开 开发目录里,按模块的 __file__ 拼出模板路径一直可用;把包放进 ZIP 后,模块仍能导入,模板却打不开。原因是导入系统能够理解归档内部位置,而普通文件系统接口未必理解。资源属于包,并不保证它已经是一份可直接打... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python reload 重载模块:函数更新了,旧引用为什么仍可能执行旧代码 修改源文件以后,谁真正变了在交互式调试里修改模块,再调用 importlib.reload,往往能继续试验。但重载不是重新启动解释器:模块内的名称会重新绑定,其他地方保存的函数引用未必跟着更新。更容易误判的是,旧函数... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读