Python动态导入模块的方法实例分析


Posted in Python onJune 28, 2018

本文实例讲述了Python动态导入模块的方法。分享给大家供大家参考,具体如下:

一、正常导入模块

正常模块导入方式: import module(模块路径)

同时导入多个模块:

import os,sys,socket

二、动态导入模块

动态导入模块允许我们通过字符串形式来导入模块

2.1 __import__函数,接受一个字符串参数

import os, sys
my_sys = __import__('sys')
my_os = __import__('os')
print(sys.version)
print(my_sys.version)
print('-------------')
print(os.getcwd())
print(my_os.getcwd())

输出:

3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]
3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]
-------------
G:\python\untitled\study8
G:\python\untitled\study8

我们将sys, os 模块名当中参数传入__import__函数中,可以看出my_sys 和my_os 其实就是相当于 os , sys 模块了。

2.2 __import__函数导入自己的模块

我们在lib包中有一个test.py模块,我们如何通过__import__函数来导入该模块呢?

# test.py内容
class Person(object):
  def __init__(self):
    self.name = 'bigberg'
# 导入模块
mod = __import__('lib.test') # 相当于获取了 lib 的路径
print(mod)
obj = mod.test.Person()
print(obj.name)

输出:

<module 'lib' from 'G:\\python\\untitled\\study8\\lib\\__init__.py'>
bigberg

2.3 动态导入模块列表

moduleNames = ['sys', 'os', 'socket']
print(type(map))
# 在python3 map函数不在是内置函数,而是class,返回的结果是 可迭代对象
print(isinstance(map(__import__, moduleNames), Iterator))
modules = list(map(__import__, moduleNames))
print(modules[0].version)

输出:

<class 'type'>
True
3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]

现在的modules[0] 就相当于 sys 模块了。

2.4 importlib 模块

动态导入模块时,python官方建议使用importlib模块,我们同样导入lib/test.py

import importlib
mod = importlib.import_module('lib.test') # mod相当于 test.py本身了,于上例不同
print(mod)
obj = mod.Person()
print(obj.name)

输出:

<module 'lib.test' from 'G:\\python\\untitled\\study8\\lib\\test.py'>
bigberg

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python获得图片base64编码示例
Jan 16 Python
Python实现发送QQ邮件的封装
Jul 14 Python
Python2包含中文报错的解决方法
Jul 09 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
python实现雪花飘落效果实例讲解
Jun 18 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
通过Python实现Payload分离免杀过程详解
Jul 13 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
使用Python解决图表与画布的间距问题
Apr 11 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 #Python
python实现将读入的多维list转为一维list的方法
Jun 28 #Python
numpy matrix和array的乘和加实例
Jun 28 #Python
python 按不同维度求和,最值,均值的实例
Jun 28 #Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 #Python
python 列表降维的实例讲解
Jun 28 #Python
基于Python中求和函数sum的用法详解
Jun 28 #Python
You might like
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
Python开发编码规范
2006/09/08 Python
Python实现的栈(Stack)
2018/01/26 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
Python序列化pickle模块使用详解
2020/03/05 Python
python让函数不返回结果的方法
2020/06/22 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
资产运营委托书范本
2014/10/16 职场文书
2014年个人售房协议书
2014/10/30 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技