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

如何在Python2上使用__init__.py中的sys.modules替换技巧

在Python2中,可以使用__init__.py中的sys.modules来替换模块的导入行为。sys.modules是一个字典,它保存了已经导入的模块的信息。

要使用sys.modules替换模块的导入行为,可以按照以下步骤进行操作:

  1. __init__.py文件中,导入sys模块:import sys
  2. 使用sys.modules字典来替换模块的导入行为。可以通过修改sys.modules字典中的键值对来实现替换。例如,如果要替换名为module_name的模块,可以将sys.modules['module_name']设置为一个自定义的模块对象。
  3. __init__.py文件中,继续导入其他需要使用的模块或者执行其他操作。

这种技巧可以用于实现模块的动态加载、模块的替换或者模块的重载等场景。

需要注意的是,这种技巧在Python3中已经不再推荐使用,因为Python3中引入了更加灵活和强大的模块导入机制。在Python3中,可以使用importlib模块来实现更加灵活的模块导入操作。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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 来重载模块这种方法是失效。 这应该算是一个小坑,不知道的人,会掉入坑爬不出来。

47630

python--模块之基本

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

25620

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.

76720

解决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.6K30

模块和包

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

41210

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添加了_

46520

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.5K50

一文让你完全弄懂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()会被执行(所有顶格写代码都会被执行

56810

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都有效; 针对从包来导包导入,例如本例

71320

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

19110

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

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

1.6K50

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.8K10

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

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

70420

Python绝对导入和相对导入

所有加载模块信息都存放在 sys.modules 结构,当 import 一个模块时,会按如下步骤来进行如果是 import A,检查 sys.modules 是否已经有 A,如果有则不加载,如果没有则为..._init__.py├── sub_pkg1│ ├── __init__.py│ ├── moduleX.py│ ├── moduleY.py└── sub_pkg2 ├── __init...所以上面的moduleX__name__是__main__, 因为他是直接运行, moduleY__name__是sub_pkg1.moduleY,因为他是被import 来使用。...如果在 Python2.x 要默认使用绝对导入,可以在文件开头加入如下语句:from __future__ import absolute_import这句 import 并不是指将所有的导入视为绝对导入...绝对导入可以避免与标准库命名冲突,实际也不推荐自定义模块与标准库命令相同。

4.1K21
领券