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列表操作实例
Jan 14 Python
Python数据类型学习笔记
Jan 13 Python
python制作企业邮箱的爆破脚本
Oct 05 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
用python写爬虫简单吗
Jul 28 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 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中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
php车辆违章查询数据示例
2016/10/14 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
Angular2库初探
2017/03/01 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python中zip函数如何使用
2020/06/04 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
时尚圣经:The Fashion Bible
2019/03/03 全球购物
CAD制图设计师自荐信
2014/01/29 职场文书
致垒球运动员加油稿
2014/02/16 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
如何用python反转图片,视频
2021/04/24 Python
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
Python函数中apply、map、applymap的区别
2021/11/27 Python
mysql序号rownum行号实现方式
2022/12/24 MySQL