首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python炫技操作:模块重载的五种方法

禁止重复导入 由于有 sys.modules 的存在,当你导入一个已导入的模块时,实际上是没有效果的。...重载模块方法一 如果你使用的 python2(记得前面在 foo 文件夹下加一个 __init__.py),有一个 reload 的方法可以直接使用 >>> from foo import bar successful...重载模块方法三 如果你使用的 Python 3.4+,请使用 importlib.reload 方法 >>> from foo import bar successful to be imported...重载模块方法五 既然影响我们重复导入的是 sys.modules,那我们只要将已导入的包从其中移除是不是就好了呢?...这是因为如果你使用 from foo import bar 这种方式,想使用移除 sys.modules 来重载模块这种方法是失效的。 这应该算是一个小坑,不知道的人,会掉入坑中爬不出来。

50230

python--模块之基本

语句 2:from....improt...,...语句 3:from....improt * 语句  模块搜索路径: python解释器在启动时会自动加载一些模块,可以使用 sys.modules 查看...顺序是:内存中已经加载的模块-->内置模块-->sys.path路径中包含的模块 包: 包是一种通过使用 ‘.模块名’ 来组织python模块名称空间的方式。...,产生的名称空间的名字同样来源于文件,即包下的 __init__.py,导入包本质就是在导入该文件 强调: 1,在python3中,即使包下没有__init__.py文件,import包仍然不会报错,而在...python2中,包下一定要有该文件,否则import包会报错。...2,创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模块

26220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python中的模块和包

    ),如果有则直接引用 ​ ps:python解释器在启动时会自动加载一些模块到内存中,可以使用sys.modules查看 如果还没有找到就从sys.path给出的目录列表中依次寻找my_module.py...包 包就是一个包含有 __init__.py 文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/ 模块组织起来 需要强调的是: 在python3中,即使包下没有 __init__.py 文件...,import 包仍然不会报错,而在python2中,包 下一定要有该文件,否则import 包报错 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块 为何要使用包...,如A.a与B.a来自两个命名空间 包的使用 示例文件 glance/ #Top-level package ├── __init__.py...api下 __init__.py 文件中定义的名字,我们可以在 __init__.py 这个文件中定义 __all__ x = 10 def func(): print('from api.

    78720

    解决python3中关于import的疑难杂症

    ,对用户隐藏各个子模块的实现细节 当我们import一个包时,会自动加载该包对应的__init__.py,因此如果在其中做太复杂的运算会造成不必要的开销 sys.modules sys.modules维护了一个已加载...执行import的步骤 创建一个新的module对象 将该module对象插入sys.modules 装载module的代码 执行新的module中对应的代码 3. import的搜索包顺序 注意第三步装载...在Python3中建议使用绝对导入。...方法一:通过模块运行的方式解决(推荐) 本质上我们是希望将module_3.py这个模块作为脚本运行,所以我们可以带上-m参数: $ cd src # 代码中是以src为根目录的, 所以需要进入到src...尽量不要使用相对引用 Python3不建议使用相对引用,最好遵循一定的开发规范,不要在代码中混用绝对引用与相对引用。

    1.8K30

    模块和包

    sys.modules查看   在第一次导入某个模块时(比如my_module),会先检查该模块是否已经被加载到内存中,如果有则直接引用,如果没有,解释器则会查找同名的内建模块,如果还没有找到就送sys.path...__.py,导入包的本质就是在导入该文件   强调:   1.在Python3中,即使包下没有__init__.py文件,import包仍然不会报错,而在Python2中,包下一定要有该文件,否则import... import *   此处是想从包api中导所有,实际上该语句只会导入包api下__init__.py文件中定义的名字,我们可以在这个文件中定义__all__: #在__init__.py中定义 x=...导入内置或者第三方模块(已经在sys.path中),但是要绝对避免使用import来导入自定义包的子模块(没有在sys.path中),应该使用from... import ...的绝对或者相对导入,且包的相对导入只能用....py └── models.py 相对导入 相对导入 单独导入包   单独导入包名称时不会导入包中所有包含的所有子模块,如: #在与glance同级的test.py中 import

    43010

    python import 机制

    Python 环境初始化过程中就会将sys module加载到内存中,但是为了local空间更干净,需要用户亲自导入,通知python.module对象实际上是一个dict在维护着,hello....']) 3075426604L >>> import hello >>> id(hello) 3075426604L  package机制 在module的基础上python增加了package...的机制,如果说module是文件的话,那package就是文件夹机制,必须在文件夹有__init__.py文件存在,在导入start.hello后并在sys.modules导入start下面的其他模块,...这和module有点不一样,dir(start)的时候已经有了__path__属性,这个属性就是告诉接下来的导入如import start.world,只会在start的路径下找了,就快了很多 >>> ...x,x.y,x.y,z导入sys.modules,而命名空间只有x.y.z 另外import * from a package,并不会导入package下面的模块,除非在__init__.py添加了_

    47620

    import导入第三方库或者模块

    python中可以import的有module和package: 1、module 模块 通常模块为一个文件,直接使用 import 文件名 就可以导入。...2、package 包 通常包总是一个目录,包目录下需要有一个名为 __init__.py的文件。可以使用import导入包,或者from + import来导入包中的部分模块。...包中可以有模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。...() 3.5 可以在模块中定义__all__,使用from module import * 语句导入__all__列表中存在的对象 from语句支持使用星号(*)代表模块中除下划线开头的所有对象: from...`*` 可以导入的对象 3.6 内置方法 导入模块时,解释器会搜索sys.path列表,sys.path包含了module的查找路径; sys.modules包含了当前所load的所有的modules

    1.6K50

    一文让你完全弄懂Stegosaurus

    事实上,隐写术是一门关于信息隐藏的技巧与科学,专业一点的讲,就是指的是采取一些不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容的方法。...,如果需要了解更加细节的部分请参考 Github上的详细文档,我会拿一些实际的案例去给大家讲解一些常见命令的用法,在后续的文章中,我会大家深入理解 python 反编译的一些东西。...Machine) 会在后台从一系列路径中搜索该模块,其搜索过程如下: 在当前目录下搜索该模块 在环境变量 PYTHONPATH 中指定的路径列表中依次搜索 在 python 安装路径中搜索 事实上,...事实上, Python 中所有加载到内存的模块都放在 sys.modules 。...另外,如果只是单纯的导入包,而包的 __init__.py 中又没有明确的其他初始化操作,那么此包下面的模块是不会自动导入的。

    1.2K20

    python3学习(1)

    unicode对象使用 在py2:将str类型的对象,转换为unicode类型 在py3:将bytes类型的对象,转换为了unicode类型 Py3中如: s = "中户任命施蒂利克积分洛杉矶的方式...、s.encode("gbk")是把unicode编码成gbk,在内存中是bytes类型保存; 2、s.encode("gbk").decode("gbk") 是把上一步得到的结果解码成gbk编码,在内存中用...这个全局字典中。...) const.magic = 33 使用sys.modules[name]可以获取一个模块对象,并可以通过该对象获取模块的属性,这儿使用了sys.modules向系统模块字典中注入了一个_const对象从而实现了在执行...import const时实际获取了一个_const实例的功能; 其他模块执行import const 导入const模块时候sys.modules[name] = _const()会被执行(所有顶格写的代码都会被执行

    58410

    Python import 【总结】

    总结:模块中__all__对对象的限制,仅对fromimport有效,对import无效。 4.2 Python2 4.2.1 导入包 在__init__.py文件中,直接import该包下的模块。...Python2中用from package import*可导入package下__init__.py文件限制的模块。将解释器切换至Python3,发现也可正常执行。...在__init__.py文件中,使用相对路径导入: dir1/__init__.py文件如下: #!...中包下__init__文件可直接import对应包下的模块,Python3不能这样导入,需使用相对路径导入(from . import module),而相对路径导入的方法对Python2和Python3...都有效; 针对包的导入,Python2中包下__init__文件中使用__all__限制frompackage import *对象时,对Python2和Python3都有效; 针对从包来导包的导入,例如本例

    73220

    python历险记之模块导入

    模块可以在其他 python 文件中被导入和使用。 包 包含多个模块的文件夹,导入该包即导入该包内的模块。必须有 __init__.py文件。...python 如何找到导入的模块 python会按顺序来查找导入的模块:从sys.modules 查找 -> 查找器查找。 sys.modules:缓存了之前导入的所有模块。...使用 from xxx import yyy 方式 示例二:在包的__init__.py 中 import 进需要的包内含有的子包和模块 # my_project/package_a/__init__....推荐使用 from xxx imoprt yyy 的方式来引入。结合__init__.py文件,引入包时,可以控制引入粒度,不需要引入无用的子包和模块。...from xxx import yyy 方式说明 若在包 package_a 的 __init__.py 文件中引入了其下具体的类、函数,则在引用 pakcage_a 的包中可以直接引用;若没有,则 xxx

    21610

    Python学习笔记整理(十三)Pyth

    __init__.py包文件 如果选择使用包导入,那就必须遵循一条约束:包导入语句的路径的每个目录内部都必须有__init__.py这个文件, 否则导入包会失败。...dir1和dir2中必须包含__init__.py,容器目录dir0不需要这类文件。因为本身没有列在import语句中 __init__.py文件可以包含程序代码,也可以是空的。...这个是最常见的自我测试代码,也是最常见最简单的单元测试协议。 编写既可以做命令行工具,也可以作为工具库使用文件时。__name__技巧很好用。...(.)更倾向于同一个包内的模块(称为包相对导入),而不是位于模块导入搜索路径上其他地方的模块(所谓的绝对导入) *现在,可以使用点号指出该导入应该与其所在包相关联:这类导入倾向于导入位于该包内的模块,...它的实现和python所有赋值运算都一样,微妙之处在于,共享对象的代码存在于不同的文件中。然后,我们使用import获得了整个模块,然后赋值某个点号运算的变量名,就会修改导入的模块中的变量名。

    1.7K50

    python之模块和包

    import 本质上只能导入模块。而from中可以对模块中的属性和方法内容进行导入操作 但其本质上还是将from中指定的模块全部都进行了初始化和加载操作 ? ? 3 as 字句的使用 ?...从执行结果来看,不会产生重复导入的现象 所有加载的模块都会记录在sys.modules中。..._init_.py 不存在,则进行下一个对应的模块,作为一个好习惯是_init_.py文件必须有,python2中进行了限制,必须有,而python3中则限制不严,但建议必须存在 4 模块和包的总结...,或者发布到网络上,便于其他人使用。...所以必须先加载常用的插件,其他插件使用时,发现需要再插入 3 接口和插件区别 接口往往是暴露出来的功能,如模块提供的函数或方法,加载模块后调用这些函数完成功能,接口是一种规范,他约定了必须实现功能

    1.4K10

    Python 简单沙盒绕过

    的人明白这些东西用途或含义,python 在这些模块或方法中都添加了文档属性,用 __doc__ 即可查看 我们使用 __doc__ 方法就可以得到一个字符串,取相应位置上的字符拼接起来就可以用来构造我们想要的命令了...每当导入新的模块时,sys.modules 都将记录这些模块。字典 sys.modules 对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典 sys.modules 将自动记录该模块。...python 导入包的过程实际上就是到对应目录读取指定 py 文件,并将其加载到解释器的过程,所以我们也可以通过读取并执行对应文件的形式导入 # python2 execfile("/usr/lib/...,所以也可以调用 os 来执行命令 platform.os.system("whoami") commands 模块 只在 python2 中使用,python3 中该模块已经被 subprocess...(匿名映射),就如同 BSS 段一样 pathname:对有名映射来说,是映射的文件名;对匿名映射来说,是此段虚拟内存在进程中的角色(如 stack、heap) /proc/self/mem:这个文件相当于程序内存的一个映射

    1.9K10

    Python从入门到入土-基础知识准备

    2021年10月5号,Python3.10 发布,这是目前到2021年为止最新的版本 而最新的开发中版本是 Python3.11 变量命名规则 变量名只能包含字母、数字和下划线。...不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print。 变量名应既简短又具有描述性。...当然,你在 Linux 服务器上的时候有时候就只能用VI/VIM了。...如果一个模块被import过,Python 会将导入的模块缓存在sys.modules字典里缓存起来,再次导入的时候不会重新执行导入动作,直接从缓存里取。...反之,如果我们从sys.modules里把导入的模块删除,则再次import会再次触发模块导入动作。 良好的包/模块组织在程序开发中有重要的作用。

    72020
    领券