当前位置: 首页 > 编程笔记 >

在Python中实现导入(importlib)

阎建德
2023-03-14
本文向大家介绍在Python中实现导入(importlib),包括了在Python中实现导入(importlib)的使用技巧和注意事项,需要的朋友参考一下

importlib软件包提供了可移植到任何Python解释器的Python源代码中import语句的实现。这也提供了比用Python以外的其他编程语言实现的实现更容易理解的实现。

该软件包还公开了实现导入的组件,使用户可以更轻松地创建自己的自定义对象(称为导入程序)以参与导入过程。

importlib软件包具有一个重要的函数,名为import_module()

import_module():

此函数以编程方式导入模块。模块名称是功能的第一个参数。可选的第二个参数指定软件包名称(如果有)。

invalidate_caches():

此功能使查找器的内部缓存无效。如果在程序运行时创建/安装了任何模块,则应调用此函数,以确保所有查找者都将注意到新模块的存在。

reload():

此功能将重新加载先前导入的模块。如果您已使用外部编辑器编辑了模块源文件,并且想在不离开Python解释器的情况下尝试新版本,则这将非常有用。

例:

创建两个名为module1.py和module2.py的Python脚本,其代码如下:

#module1
def main():
   print ('module imported', __name__)
   return
if __name__=='__main__':
   main()

现在,我们使用importlib软件包动态导入这些模块。

>>> import importlib
>>> mod=importlib.import_module('module1')
>>> mod.__name__
'module1'
>>> mod=importlib.import_module('module2')
>>> mod.__name__
'module2'
>>> mod.main()
module imported module2
>>>

importlib软件包包含以下子模块:

importlib.abc

此模块包含导入使用的所有核心抽象基类。还提供了一些核心抽象基类的子类,以帮助实现核心ABC。

importlib.resources

该模块利用Python的导入系统来提供对包内资源的访问。

importlib.machinery

该模块包含有助于导入查找和加载模块的各种对象。

importlib.util

该模块具有用于进口商的实用程序代码。它包含有助于构建进口商的各种对象。其中定义了以下重要功能。

find_spec():

此功能查找相对于指定软件包名称的模块规格。如果名称用于子模块(包含点),则将自动导入父模块。名称和包的工作方式与import_module()相同。

module_from_spec(规格)

基于spec和spec.loader.create_module创建一个新模块。

例:

import importlib.util
def check_module(mod):
   spec = importlib.util.find_spec(mod)
   if spec is None:
      print('Module: {} not found'.format(mod))
      return None
   else:
      print('Module: {} can be imported!'.format(mod))
      return spec
   def import_module(spec):
      mod = importlib.util.module_from_spec(spec)
      spec.loader.exec_module(mod)
      return mod
if __name__ == '__main__':
   spec = check_module('notamodule')
   spec = check_module('module1')
   if spec:
      mod = import_module(spec)
      mod.main()

输出:

Module: notamodule not found
Module: module1 can be imported!
module imported module1
 类似资料:
  • 本文向大家介绍Python实现将xml导入至excel,包括了Python实现将xml导入至excel的使用技巧和注意事项,需要的朋友参考一下 最近在使用Testlink时,发现导入的用例是xml格式,且没有合适的工具转成excel格式,xml使用excel打开显示的东西也太多,网上也有相关工具转成csv格式的,结果也不合人意。 那求人不如尔己,自己写一个吧 需要用到的模块有:xml.dom.mi

  • 上面写着 我怎么才能修好这个?是否需要设置一个环境变量来将Python指向pyspark头/库/等?如果我的spark安装是/spark/,我需要包括哪些pyspark路径?或者pyspark程序只能从pyspark解释器运行吗?

  • 之前我安装了pytorch,PIL,numpy。。。使用pip。之后我安装了python3。因此,ipython从python2切换到python3。我必须使用ipython2来启动python2内核。这些模块在ipython2中仍然可以很好地工作,但当我使用python、python2、python2.7运行python脚本时,它们都会引发以下问题: 没有名为PIL的模块(Numpy, torc

  • 问题内容: 我很困惑。我正在关注以下教程(特别是6.4.2) http://majorsilence.com/pygtk_audio_and_video_playback_gstreamer 我正在运行Python 2.7,PyGTK 2.24和GStreamer WinBuilds 10.7(主要安装程序和SDK)。 当我尝试编译程序时,出现以下错误: 追溯(最近一次通话最后一次):导入gst文

  • 问题内容: 我正在尝试运行以下简单代码来检索SSL证书: 但我收到错误消息: 我知道我必须导入OpenSSL。但是我不知道怎么做?以及从哪里获得OpenSSL?我从https://pypi.python.org/pypi/pyOpenSSL下载了一个名为pyOpenSSL的模块, 其中包含两个文件夹:pyOpenSSL-0.15.1.dist- info和OpenSSL。当我尝试添加导入OpenS

  • 问题内容: 我正在尝试编写一些使用Numpy的代码。但是,我无法导入它: 我尝试了这个问题的建议: 然后搜索在该路径中命名的文件: 但是什么都没发生。 所以… 还有其他通常安装Python模块的地方吗? 如果事实证明中心区域中未安装numpy,该如何在我的帐户中本地安装numpy? 问题答案: 你安装了吗? 在debian / ubuntu上: 在Windows上: 在其他系统上: