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字典get()方法用法分析
Apr 17 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
Django中的cookie和session
Aug 27 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
python的reverse函数翻转结果为None的问题
May 11 Python
浅谈django 重载str 方法
May 19 Python
python如何绘制疫情图
Sep 16 Python
python多线程爬取西刺代理的示例代码
Jan 30 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
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
PHP 读取和编写 XML
2014/11/19 PHP
PHP中header用法小结
2016/05/23 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
使用js写的一个简易的投票
2013/11/27 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
Python import与from import使用及区别介绍
2018/09/06 Python
python导入pandas具体步骤方法
2019/06/23 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
统计员岗位职责
2013/11/14 职场文书
大学生职业生涯规划书前言
2014/01/09 职场文书
代理班主任的自我评价
2014/02/04 职场文书
教师党性分析材料
2014/02/04 职场文书
语文教研活动总结
2014/07/02 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle