当前位置:
首页 > temp > python入门教程 >
-
python中动态导入文件的方法
1.简介
在实际项目中,我们可能需要在执行代码的过程中动态导入包并执行包中的相应内容,通常情况下,我们可能会将所需导入的包及对象以字符串的形式传入,例如test.test.run,下面将介绍如何动态导入。
假设存在如下包:
其中test.py的内容如下:
count = 1
def run():
print("run")
下面,我们将使用test.test2.run来动态导入run方法
一、使用内置的__import__方法导入相应的包
module = __import__(
"test2.test", globals=globals(), locals=locals(), fromlist=["run"]
)
print(module)
print(getattr(module, "run"))
print(getattr(module, "count"))
# 结果
<module 'test2.test' from 'c:\\Users\\ts\\Desktop\\日报\\2023.1.5\\test2\\test.py'>
<function run at 0x000002EC1CB9B250>
1
__import__(name,globals=None,locals=None,fromlist=(),level=0)-> module
含义:导入模块。因为此函数是供Python解释器使用的,而不是一般用途,所以最好使用importlib.import_module()
以编程方式导入模块。
- name:需要导入的模块的名称,包含全路径。
- globals: 当前范围的全局变量,正常设置为globals()。
- locals:当前范围的局部变量,正常不需要使用,设置为locals()。
- fromlist: 控制导入的包,例_import__('a.B',…)在fromlist为空时返回包a,但在fromlist不为空时,返回其子模块B,理论上只要fromlist不为空,则导入的是整个的name的包。
- level:判断路径是绝对的还是相对的,0是绝对的,正数是相当于当前模块要搜索的父目录的数量。
二、使用importlib.import_module进行导入
from importlib import import_module
module = import_module(name="test2.test")
print(module)
print(getattr(module, "run"))
print(getattr(module, "count"))
import_module(name, package=None)
- name: 需要导入的包名。
- package: 需要相对导入的包名称,目前发现设置package后,name只能设置package以内的内容,示例如下:
存在如下包
module = import_module(name="..test2", package="test3.test3")
print(module)
print(getattr(module, "run"))
print(getattr(module, "count"))
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078
# 结果
<module 'test3.test2' from 'c:\\Users\\ts\\Desktop\\日报\\2023.1.5\\test3\\test2.py'>
<function run at 0x0000024665C00310>
1
上述结果导入了test3.test2,name只能设置package以内的包。
三、直接使用exec拼接代码执行(不推荐)
str_data = "test2.test"
exec(
"import {} as t\n\
\
print(t.run())\n\
print(t.count)\n".format(
str_data
)
)
上述方式不推荐,其实就是相当于本地导入然后将代码作为参数添加到exec的参数中。
补充
关于importlib模块,还有一个方法我们需要去注意一下,就是reload方法,但我们在代码执行过程中动态的修改了某个包的内容时,想要立即生效,可以使用reload方法去重载对应的包即可。
出处:https://www.cnblogs.com/djdjdj123/p/17293329.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数