> > from foo import barsuccessful to be imported >> > from foo import bar >> > 重载模块方法一 如果你使用的 python2(记得前面在 foo 文件夹下加一个 __init__.py ),有一" />
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

模块重载的五种方法

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-02 10:50 次阅读

环境准备

新建一个 foo 文件夹,其下包含一个 bar.py 文件

$ tree foo
foo
└── bar.py

0 directories, 1 file

bar.py 的内容非常简单,只写了个 print 语句

print("successful to be imported")

只要 bar.py 被导入一次,就被执行一次 print

禁止重复导入

由于有 sys.modules 的存在,当你导入一个已导入的模块时,实际上是没有效果的。

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >

重载模块方法一

如果你使用的 python2(记得前面在 foo 文件夹下加一个 __init__.py),有一个 reload 的方法可以直接使用

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >
 >> > reload(bar)
successful to be imported
< module 'foo.bar' from 'foo/bar.pyc' >

如果你使用的 python3 那方法就多了,详细请看下面

重载模块方法二

如果你使用 Python3.0 -> 3.3,那么可以使用 imp.reload 方法

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >
 >> > import imp
 >> > imp.reload(bar)
successful to be imported
< module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py' >

但是这个方法在 Python 3.4+,就不推荐使用了

< stdin >:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses

重载模块方法三

如果你使用的 Python 3.4+,请使用 importlib.reload 方法

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >
 >> > import importlib
 >> > importlib.reload(bar)
successful to be imported
< module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py' >

重载模块方法四

如果你对包的加载器有所了解(详细可以翻阅我以前写的文章: https://iswbm.com/84.html

还可以使用下面的方法

>> > from foo import bar
successful to be imported
 >> > from foo import bar
 >> >
 >> > bar.__spec__.loader.load_module()
successful to be imported
< module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py' >

重载模块方法五

既然影响我们重复导入的是 sys.modules,那我们只要将已导入的包从其中移除是不是就好了呢?

>> > import foo.bar
successful to be imported
 >> >
 >> > import foo.bar
 >> >
 >> > import sys
 >> > sys.modules['foo.bar']
< module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py' >
 >> > del sys.modules['foo.bar']
 >> >
 >> > import foo.bar
successful to be imported

有没有发现在前面的例子里我使用的都是 from foo import bar,在这个例子里,却使用 import foo.bar,这是为什么呢?

这是因为如果你使用 from foo import bar 这种方式,想使用移除 sys.modules 来重载模块这种方法是失效的。

这应该算是一个小坑,不知道的人,会掉入坑中爬不出来。

>> > import foo.bar
successful to be imported
 >> >
 >> > import foo.bar
 >> >
 >> > import sys
 >> > del sys.modules['foo.bar']
 >> > from foo import bar
 >> >
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2654

    浏览量

    47278
  • python
    +关注

    关注

    54

    文章

    4763

    浏览量

    84349
收藏 人收藏

    评论

    相关推荐

    电感计算公式与种方法

    由Q值决定谐振电感: l 单位: 微亨第种方法:线圈电感的计算公式1、针对环行CORE,有以下公式可利用: (IRON)L=N2.AL L= 电感值(H)H-DC=0.4πNI / l N= 线圈
    发表于 11-02 09:19

    java方法重载详解

    Java重载是指Java允许在一个类中,存在多个拥有相同的名字,但参数不同的方法,编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程
    发表于 03-19 16:14

    实现流水灯的方法介绍

    的主题,今天的主题是种方法实现流水灯,讲这个的目的不是为了让你会种方法而可以在小伙伴中炫耀,而是想告诉大家一个理念,学习要善于思考,活学活用,解决问题的办法不只有一个。好了,先上一
    发表于 07-13 00:30

    基于MySQL根据出生日期计算年龄的种方法

    MySQL根据出生日期计算年龄的种方法比较
    发表于 04-01 14:49

    启动Redis的三种方法

    Redis笔记(1)——安装、卸载、三种方法启动Redis,Redis命令使用(干货十足),Redis两种方法设置密码,时间复杂度(更完善哦~)
    发表于 06-08 16:09

    芯片功能测试的种方法

    芯片功能测试常用5种方法有板级测试、晶圆CP测试、封装后成品FT测试、系统级SLT测试、可靠性测试。
    发表于 06-09 16:25

    噪声系数测量的三种方法

    噪声系数测量的三种方法 本文介绍了测量噪声系数的三种方法:增益法、Y
    发表于 05-07 13:38 2139次阅读

    安装LED灯带的5种方法

    如何安装LED灯带呢?大家可以试试以下种方法
    发表于 07-20 14:53 8660次阅读

    种方法拆卸PCB贴片元件资料下载

    电子发烧友网为你提供种方法拆卸PCB贴片元件资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-24 08:42 11次下载
    <b class='flag-5'>五</b><b class='flag-5'>种方法</b>拆卸PCB贴片元件资料下载

    python统计词频的三种方法

    python统计词频的三种方法方法
    发表于 05-25 14:33 2次下载

    识别电路的10种方法

    对较复杂的电路应先将原电路简化为等效电路,以便分析和计算。识别电路的方法很多,现结合具体实例介绍十种方法
    发表于 02-08 16:20 243次下载
    识别电路的10<b class='flag-5'>种方法</b>

    python中间模块重载介绍

    python通过reload重载模块动态更新最新代码。 ## 1.1 reload
    的头像 发表于 02-21 11:16 509次阅读

    分享芯片功能测试的种方法

    芯片功能测试常用5种方法有板级测试、晶圆CP测试、封装后成品FT测试、系统级SLT测试、可靠性测试。
    的头像 发表于 06-09 15:46 2831次阅读
    分享芯片功能测试的<b class='flag-5'>五</b><b class='flag-5'>种方法</b>!

    实现更好5G的种方法.zip

    实现更好5G的种方法
    发表于 01-13 09:07 0次下载

    人脸检测的种方法各有什么特征和优缺点

    人脸检测是计算机视觉领域的一个重要研究方向,主要用于识别和定位图像中的人脸。以下是常见的人脸检测方法及其特征和优缺点的介绍: 基于肤色的方法 特征:基于肤色的
    的头像 发表于 07-03 14:47 587次阅读