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实现去除代码前行号的方法
Mar 10 Python
一些Python中的二维数组的操作方法
May 02 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
python Flask实现restful api service
Dec 04 Python
python 以16进制打印输出的方法
Jul 09 Python
对pandas的行列名更改与数据选择详解
Nov 12 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
python异常处理和日志处理方式
Dec 24 Python
Python接口测试数据库封装实现原理
May 09 Python
Python新手学习raise用法
Jun 03 Python
python和php哪个容易学
Jun 19 Python
Python-OpenCV教程之图像的位运算详解
Jun 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
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
js动态为代码着色显示行号
2013/05/29 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
详解a++和++a的区别
2017/08/30 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
python使用epoll实现服务端的方法
2018/10/16 Python
解决Django中多条件查询的问题
2019/07/18 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
Python 实现数组相减示例
2019/12/27 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
python跨文件使用全局变量的实现
2020/11/17 Python
HTML5标签大全
2016/11/23 HTML / CSS
大码女装:Ulla Popken
2019/08/06 全球购物
工作交流会欢迎词
2014/01/12 职场文书
商务邀请函范文
2014/01/14 职场文书
中学生自我鉴定
2014/02/04 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
酒鬼酒广告词
2014/03/21 职场文书
保护水资源的标语
2014/06/17 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
如何在C++中调用Python
2021/05/21 Python
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python
ant design vue的form表单取值方法
2022/06/01 Vue.js