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脚本分享
Apr 21 Python
基于Python的接口测试框架实例
Nov 04 Python
详解python脚本自动生成需要文件实例代码
Feb 04 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
Django中URL的参数传递的实现
Aug 04 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
Python接口测试get请求过程详解
Feb 28 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
Python实现简单猜数字游戏
Feb 03 Python
Python如何导出导入所有依赖包详解
Jun 08 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
MVC模式的PHP实现
2006/10/09 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
事件模型在各浏览器中存在差异
2010/10/20 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
python 读写txt文件 json文件的实现方法
2016/10/22 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python global和nonlocal用法解析
2020/02/03 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
大学学习计划书范文
2014/05/02 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
委托收款证明
2015/06/23 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript