Python炫技操作:花式导包的八种方法


Python炫技操作:花式导包的八种方法

文章插图
作者 | 写代码的明哥
题图@视觉中国
来源 | Python编程时光(ID: Cool-Python)
今天这篇文章,跟大家分享 8 种导入模块的方法 。
 直接 import人尽皆知的方法,直接导入即可
>>> import os>>> os.getcwd'/home/wangbm'与此类似的还有,不再细讲
import ...import ... as ...from ... import ...from ... import ... as ...一般情况下,使用 import语句导入模块已经够用的 。
但是在一些特殊场景中,可能还需要其他的导入方式 。
下面我会一一地给你介绍 。
 使用 __import____import__函数可用于导入模块,import 语句也会调用函数 。其定义为:__import__(name[, globals[, locals[, fromlist[, level]]]])参数介绍:
  • 【Python炫技操作:花式导包的八种方法】name (required): 被加载 module 的名称
  • globals (optional): 包含全局变量的字典,该选项很少使用,采用默认值 global
  • locals (optional): 包含局部变量的字典,内部标准实现未用到该变量,采用默认值 - local
  • fromlist (Optional): 被导入的 submodule 名称
  • level (Optional): 导入路径选项,Python 2 中默认为 -1,表示同时支持 absolute import 和 relative import 。Python 3 中默认为 0,表示仅支持 absolute import 。如果大于 0,则表示相对导入的父目录的级数,即 1 类似于 '.',2 类似于 '..' 。
使用示例如下:
>>> os = __import__('os')>>> os.getcwd'/home/wangbm'如果要实现 import xx as yy的效果,只要修改左值即可如下示例,等价于import os as myos
>>> myos = __import__('os')>>> myos.getcwd'/home/wangbm' 
使用 importlibimportlib 是 Python 中的一个标准库,importlib 能提供的功能非常全面 。
它的简单示例:
>>> import importlib>>> myos=importlib.import_module("os")>>> myos.getcwd'/home/wangbm'如果要实现 import xx as yy效果,可以这样
>>> import importlib>>>>>> myos = importlib.import_module("os")>>> myos.getcwd'/home/wangbm' 使用 impimp模块提供了一些 import 语句内部实现的接口 。例如模块查找(find_module)、模块加载(load_module)等等(模块的导入过程会包含模块查找、加载、缓存等步骤) 。可以用该模块来简单实现内建的__import__函数功能:>>> import imp>>> file, pathname, desc = imp.find_module('os')>>> myos = imp.load_module('sep', file, pathname, desc)>>> myos<module 'sep' from '/usr/lib64/python2.7/os.pyc'>>>> myos.getcwd'/home/wangbm'从 python 3 开始,内建的 reload 函数被移到了 imp 模块中 。而从 Python 3.4 开始,imp 模块被否决,不再建议使用,其包含的功能被移到了 importlib 模块下 。即从 Python 3.4 开始,importlib 模块是之前 imp 模块和 importlib 模块的合集 。
使用 execfile在 Python 2 中有一个 execfile 函数,利用它可以用来执行一个文件 。
语法如下:
execfile(filename[, globals[, locals]])参数有这么几个:
  • filename:文件名 。
  • globals:变量作用域,全局命名空间,如果被提供,则必须是一个字典对象 。
  • locals:变量作用域,局部命名空间,如果被提供,可以是任何映射对象 。
>>> execfile("/usr/lib64/python2.7/os.py")>>>>>> getcwd'/home/wangbm' 
使用 execexecfile只能在 Python2 中使用,Python 3.x 里已经删除了这个函数 。
但是原理值得借鉴,你可以使用 open … read 读取文件内容,然后再用 exec 去执行模块 。
示例如下:
>>> with open("/usr/lib64/python2.7/os.py", "r") as f:... exec(f.read)...>>> getcwd'/home/wangbm' import_from_github_com有一个包叫做import_from_github_com,从名字上很容易得知,它是一个可以从 github 下载安装并导入的包 。为了使用它,你需要做的就是按照如下命令使用pip 先安装它 。$ python3 -m pip install import_from_github_com这个包使用了PEP 302中新的引入钩子,允许你可以从github上引入包 。这个包实际做的就是安装这个包并将它添加到本地 。你需要 Python 3.2 或者更高的版本,并且 git 和 pip 都已经安装才能使用这个包 。


推荐阅读