You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何实现仅在模块导入或重载时打印指定内容

解决模块导入/重载时仅打印一次版本信息的方案

Python模块的顶层代码默认仅会在首次导入时执行一次,重复调用import不会重新触发顶层代码运行。你遇到的执行类方法时重复打印的问题,一般是代码中存在显式importlib.reload()调用、使用了带热重载的开发工具(如Flask调试模式、Jupyter的autoreload扩展),导致模块被反复加载触发顶层代码执行。

你可以通过给模块加自定义标记属性的方式控制打印逻辑,适配所有Python3版本,修改后的代码如下:

import sys
import numpy as np

# 仅在模块首次导入/重载时打印版本信息
if not hasattr(sys.modules[__name__], '_version_printed'):
    print('This is the script version 1.0')
    setattr(sys.modules[__name__], '_version_printed', True)

def func1():
    # 你的原有逻辑
    pass

def func2():
    pass

class Open:
    def __init__(self, others):
        pass

    def func3(self):
        pass

def func4():
    pass

def func5():
    pass

原理解释

  • sys.modules[__name__]可以获取当前模块的实例对象
  • 首次导入模块时,模块实例没有_version_printed属性,会执行打印并给模块添加该属性
  • 后续反复导入模块、调用模块内的函数/类方法时,模块实例的_version_printed属性已经存在,不会重复执行打印
  • 如果显式重载模块(调用importlib.reload()),原有模块实例会被销毁重建,属性丢失,会再次打印版本信息,刚好匹配你要求的重载时打印的需求

如果需要同时支持直接运行脚本时也打印版本信息,可以把判断条件修改为:

if __name__ == '__main__' or not hasattr(sys.modules[__name__], '_version_printed'):
    print('This is the script version 1.0')
    setattr(sys.modules[__name__], '_version_printed', True)

内容的提问来源于stack exchange,提问作者user3177899

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:21:04