python 中 importlib.reload(sys) 的作用

Python实时重新加载模块库之reloading使用详解 在 Python 开发中,经常会遇到修改代码后需要重新加载模块的情况。传统的做法是退出 Python 解释器,然后重新启动程序,但这样效率低下且不方便。幸运的是,Python 社区提供了许多工具来解决这个问题,其中之一就是 reloading 库。本文将深入介绍 reloading 库的原理、用法以及如何在实际项目中高效使用。 阅读详情

1. reload(sys)的历史原因        

        在python2.x版本中,python默认的编码方式是ASCII编码,当程序中出现非ASCII编码时,程序会报错:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)

因为,此时python无法处理非ASCII编码的程序。

        解决这个问题的方法是修改python的默认编码方式,具体方式是,在脚本头部中添加以下代码:

import sys 
reload(sys)   # 加载python编译系统
sys.setdefaultencoding(‘utf8’)  # 把python的默认编码方式修改为“utf-8”方式

2. reload(sys)的应用现状

        以上是python2的写法,在python3中这个需要已经不存在了,因为python3已经不存在这个问题了:在Python2.x中由于str和byte之间没有明显区别,经常要依赖于defaultencoding来做转换;而在python3中有了明确的str和byte类型区别,从一种类型转换成另一种类型要显式指定encoding。换句话说,python2.x默认使用的是ASCII编码,而python3.X已经默认使用“utf-8”编码了。

        但是,即便如此,为了保险起见,或者习惯的原因,很多程序员在python3.x编程中,仍旧保留了 reload(sys)的习惯,不过命令的使用方式发生了变化,变成了以下模式:

import importlib,sys
importlib.reload(sys)

3. 如何查看python默认的编码方式

方法:

import sys
sys.getdefaultencoding()  

在我的python3.8中的结果: 

(base_env) PS D:\code\project> python
Python 3.8.15 (default, Nov 24 2022, 14:38:14) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>>   

由上可见,python3.8的默认编码方式已经是“utf-8”了。 

参考:

Python: 为什么需要reload(sys)后设置编码 - 简书

python 中的reload(sys)_小小小丸子儿的博客-优快云博客_reload(sys)

【Python】python基础2 在Python的模块导入机制中,一旦模块被成功导入,它就会被缓存到 字典中。随后的 语句如果尝试导入同一个模块,Python会直接从 中获取已缓存的模块对象,而不会再次执行模块的代码。这种设计是为了提高性能和避免不必要的重复执行。然而,在某些特定的开发和调试场景中,我们可能需要强制重新加载一个已经导入的模块,以便应用其最新的代码更改,而无需重启整个Python解释器。Python标准库提供了 函数来满足这一需求。理解 的工作原理、其局限性以及潜在的风险,是高级Python开发中不可或缺的知识。模块 阅读详情

相关推荐

python importlib 模块的用法和本质详解

importlib这是importlib最高级的部分,它允许你创建自己的查找器和加载器,从而完全改变 Python 的导入行为。使用场景从非文件系统加载: 从数据库、ZIP 压缩包、网络 URL 或内存中直接导入 Python 代码。透明的代码转换: 在导入时自动对源代码进行转换,例如,实现一种新的编程语言语法,或者自动为函数添加日志记录。这是一个非常高级的主题,通常只有框架和库的开发者才会接触到。功能层级核心组件用途复杂度高层/常用根据字符串动态导入模块,满足 99% 的动态导入需求。简单。

m0_49133355的博客 827

python reload(sys)找不到,name 'reload' is not defined

在操作数据库的时候遇到这个问题,为什么会出现这种原因?查询如下: python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),pyt...

dianyong8387的博客 1998

Python 模块重新加载

函数重新加载模块时,Python 会执行模块中的全部代码。这意味着重新加载后的模块会重新执行所有顶层代码,包括变量的初始化和函数的定义。因此,在重新加载模块时,需要谨慎确保模块的代码能够正确处理重新加载的情况。通常情况下,当我们导入一个模块后,它的代码会在第一次导入时执行,并且在之后的导入中不会再次执行。但有时候我们希望在运行时重新加载已导入的模块,以便更新模块中的代码。总结起来,重新加载模块是一种在运行时更新模块代码的方法。函数,我们可以重新加载已导入的模块,并使更新后的代码得以生效。

CodeShiftZ的博客 696

【问题小记】reload(sys)报错

sys能够访问 Python 解释器在运行时的环境。在 Python 程序运行时,由于模块导入顺序不同,可能会导致 sys 模块无法正确加载。而 reload(sys) 就是重新加载 sys 模块,从而保证模块正确加载。.x版本中,python默认的编码方式是ASCII编码,当程序中出现非ASCII编码时,程序会报错。编码,对于使用的是Python 3 的情况,就不需要。但是在python3版本中系统默认使用的就是。由于python3版本中系统默认使用的就是。

weixin_45860188的博客 2166

Python 导入系统详解:模块加载与 import 机制【高级python篇】

本文深入解析了Python导入系统的核心机制,从模块概念到完整加载流程。主要内容包括: 模块基础:模块是包含Python代码的文件,导入时会执行顶层代码 导入语法:多种导入方式及其差异(import/from...import/别名) 查找路径:sys.path决定模块查找顺序 执行流程:从缓存检查到模块加载的完整过程 缓存机制:sys.modules避免重复加载 包结构:init.py文件的作用 导入方式:绝对导入与相对导入的区别 高级特性:动态导入、模块重载和导入钩子 文章通过代码示例展示了Python

博客 393

SQL实现数据仓库ETL:分层设计、增量抽取与性能优化实践

在数据仓库建设过程中,ETL(抽取、转换、加载)是数据流转的核心环节。传统观点常将ETL与专业工具或大数据框架绑定,但在中小规模数据场景下,基于SQL的ETL方案凭借低门槛、高可维护性和直观的排错体验,成为高效且务实的选择。本文从ETL的基础概念出发,阐述数据仓库分层(ODS、DWD、DWS、ADS)中每层ETL的定位与职责,重点剖析增量抽取策略(时间戳、主键、日志)下的SQL实现方式,以及数据清洗、去重和格式化的常见写法。同时,结合真实项目经验,分享慢SQL优化技巧、任务调度依赖设计、幂等性保障和常见问题

weixin_33290540的博客 345

python模块重载的五种方法

环境准备 新建一个 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 i

python学习者的博客 617

Google Earth Engine:计算逐年全球潜在蒸发量(PET)的 ERA 数据

通过获取温度、湿度和降水数据,并使用Penman-Monteith公式,我们可以得到每年的潜在蒸发量。在本文中,我们将使用Google Earth Engine平台和ERA(欧洲再分析气象数据集)数据来计算逐年全球的潜在蒸发量(PET)。接下来,我们需要对ERA数据进行预处理,以获取我们需要的潜在蒸发量数据。有了温度、湿度和降水数据,我们可以使用Penman-Monteith公式来计算每年的潜在蒸发量。最后,我们可以将计算得到的潜在蒸发量数据进行可视化,以便更好地理解全球的水汽蒸发情况。

VwajAlgorithm的博客 730

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

环境准备新建一个 foo 文件夹,其下包含一个 bar.py 文件$treefoofoo└──bar.py0directories,1filebar.py 的内容非常简单,只写了个 print 语句print("successfultobeimported")只要 bar.py 被导入一次,就被执行一次 print禁止重复导入由于有 sys.modules 的存在,当你导入一个已...

weixin_39550587的博客 195

用C#+Avalonia写跨平台串口工具:Windows/macOS/Linux通吃,还能解析Modbus+画实时曲线

不管是串口还是蓝牙,核心操作都是“打开连接、发数据、收数据、关连接”,先定义一个// 通信设备接口:统一串口/蓝牙的操作// 连接状态变化事件(UI层订阅)// 接收数据事件(收到数据后触发)// 通信配置(不同设备配置不同,用泛型)// 通信设备接口:统一串口/蓝牙的操作 public interface ICommDevice : IDisposable {// 连接状态变化事件(UI层订阅) event Action < bool > OnConnectionChanged;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 997

基于经验模态分解和核主成分分析结合长短期记忆网络EMD-KPCA-LSTM的光伏功率预测算法--Matlab

基于经验模态分解和核主成分分析结合长短期记忆网络EMD-KPCA-LSTM的光伏功率预测算法--Matlab

前程算法屋的博客 625

旧笔记-python

之前学python的时候整理的一些东西,先丢这里 因为不怎么会用,所以笔记里的斜体、黑体字基本代表了两边有单、双下划线。 事实证明以前用这个方式记东西除了能偷懒,没任何用。甚至之后就没做过笔记。有些肯定要重新学的就不记录在这了。 基本知识和未分类的知识 在shell中,一般用python寻找实际的文件需要加.py后缀名,但import语句中不必如此。 关于语句和函数,函数后直接加() 函数有reload(需从imp导入);print;dir dir 获得模块内部的可用的全部变量名的列表 不可变:数字、字符

qq_46841701的博客 614

【23】C++实战篇——C++报错:LNK2001:无法解析的外部符号 ,LNK2019: 无法解析的外部符号,原因分析及解决方法

该文分析了VS项目中出现的"无法解析的外部符号"LNK2001/LNK2019错误。问题表现为跨项目共享变量时,Projector项目无法解析Line项目中声明的外部变量ImgSavePath和ImgFormat。原因在于头文件声明了变量但未包含实现的源文件。解决方法是将getLine.cpp文件添加到Projector项目中。文章还总结了两种错误代码的区别:LNK2001通常对应变量缺失,LNK2019对应函数缺失。最后列出了具体的报错信息,包括无法解析的变量和函数符号。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2007

2021-02-05

模块的导入 import 语句导入 import 语句的基本语法格式如下: import 模块名#导入一个模块 import 模块1,模块2… #导入多个模块 import 模块名as 模块别名#导入模块并使用新名字 import 加载的模块分为四个通用类别: a.使用python 编写的代码(.py 文件); b.已被编译为共享库或DLL 的C 或C++扩展; c.包好一组模块的包 d.使用C 编写并链接到python 解释器的内置模块; from…import 导入 from 模块名import 成员1

weixin_54475711的博客 357

基于sklearn实现LDA主题模型(附实战案例)

目录LDA主题模型1.LDA主题模型原理2.LDA主题模型推演过程3.sklearn实现LDA主题模型(实战)3.1数据集介绍3.2导入数据3.3分词处理 3.4文本向量化3.5构建LDA模型3.6LDA模型可视化 3.7困惑度 其实说到LDA能想到的有两个含义,一种是线性判别分析(Linear Discriminant Analysis),一种说的是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)。 现在讨论的是主题模型

m0_64336780的博客 2万+

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)linux驱动由浅入深系列:块设备驱动之二(块设备驱动结构分析)块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅增加了操作缓冲区,对用户请求顺序进行队列重拍等等。字符设备驱动的相关分析可以查看本博客相关的博文。 按照本博客的行文习惯,在具体分析块设备驱动代码之前,我们会从整体上了解一下研究对象的特征,以及用户空间...

Radia的专栏 1万+

Python中的模块与包,搭建你的代码库

模块是一个包含 Python 代码的 .py 文件。文件名就是模块名(去掉 .py 后缀)。模块可以定义函数、类、变量,也可以包含可执行代码。python包是一种通过点式模块名组织 Python 模块的方式。一个包就是一个包含 __init__.py 文件的目录(Python 3.3+ 中 __init__.py 可以省略,但建议保留以兼容旧版本)。典型结构:单个模块: .py 文件,封装代码包*: 包含 __init__.py 的目录,组织模块。

m0_51069462的博客 432

使用Google Earth Engine下载JRC全球水体数据

通过Google Earth Engine平台和提供的源代码,研究人员和水资源管理者可以方便地获取和利用这一重要的水资源监测数据集,从而开展相关的研究和决策支持工作。要使用Google Earth Engine下载JRC全球水体数据,首先需要在Google Earth Engine平台上进行注册和登录。JRC全球水体数据是由欧洲联合研究中心开发的高分辨率全球水体分类数据集,覆盖了整个地球的陆地和水域。下载完成后,你可以使用各种遥感数据处理软件来打开和分析这些数据,以满足不同的研究和应用需求。

LrlDebug的博客 1158

python3中reload(sys)被替换为importlib.reload(sys)

reload(sys)被替换为importlib.reload(sys) reload(sys)被替换为 import importlib importlib.reload(sys)

LelemamaAnne的博客 1081

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

python中reload(sys)作用详解

python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报错UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),python没办法处理非ascii编码的,此时需要自己设置python的默认编码,一般设置为utf...

amf12345的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python中动态导入对象importlib.import_module()的使用

先入为主 背景 一个函数运行需要根据不同项目的配置,动态导入对应的配置文件运行。 解决 文件结构 a #文件夹 │a.py │__init__.py b #文件夹 │b.py │__init__.py ├─c#文件夹 │c.py │__init__.py # c.py 中内容 args = {'a':1} class C: def c(self): ...

edward_zcl的博客 15万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【解决python3 reload(sys)报错问题】

Python 3.x中reload(sys)报错是因为reload函数已被移除。解决方案是改用importlib.reload()方法:先导入importlib模块,再调用importlib.reload(module_name)。如果是Python 2.x环境,可以直接使用reload()或从imp模块导入。建议通过sys.version确认Python版本后选择对应方法。该错误是由于Python版本更新导致函数弃用所致。

yuzhizu的专栏 482

python3的reload(sys)

在python3中这样写报错 改为: import importlib,sys importlib.reload(sys)

weixin_52475977的博客 1194

Python 处理编码方式问题 python reload(sys)无法使用

python 2.X版本 当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0x?? in position 1: ordinal not in range(128),python没办法处理非ascii编码的,此时需要自己设置python的默认编码,一般设置为utf8的编码格式...

King_John的专栏 9407

python中报错 name ‘reload‘ is not defined解决方法

一段python2.7的代码,里面有如下代码: reload(sys) sys.setdefaultencoding("utf-8") 重新加载sys模块,并设置默认编码utf-8 在Python 3.x中运行提示: name ‘reload’ is not defined python3.x下应该改为如下方式: import importlib importlib.reload(sys) 最后一句sys.setdefaultencoding(“utf-8”)python3.x下就不需要了,默认编码就是

沧笙踏歌的博客 6315
上一篇: vscode 配置 terminal 默认环境
下一篇: 常用轮子:text文本文件处理
wzg2016
博客等级 码龄10年 539粉丝 493原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值