python importlib_Python importlib讲解

Python importlib讲解

Python标准库中提供了importlib模块,目的是提供import语句(还有import())的底层实现,另外,importlib让程序员可以在导入过程中创建自己的对象。之前的imp模块在Python3.4中被importlib取代了。

importlib模块非常复杂,下面只讲解其中的一部分内容。

—————————————————————————————————————————————————————————————————————————

动态导入

importlib支持通过字符串动态导入模块,如:

imoprt importlib#导入foo.py模块

foo = importlib.import_module('foo')

foo.main()

模块导入检查

导入模块当模块不存在时会抛出ImportError异常,如果我们想在导入模块之前检查该模块是否可以被导入,可以使用importlib模块进行检查,如下:

importimportlib.utildefcheck_module(module_name):"""检查模块时候能被导入而不用实际的导入模块"""module_spec=importlib.util.find_spec(module_name)if module_spec isNone:print('Module: {} not found'.format(module_name))returnNoneelse:print('Module: {} can be imported!'.format(module_name))returnmodule_specdefimport_module_from_spec(module_spec):"""通过传入模块的spec返回新的被导入的模块对象"""module=importlib.util.module_from_spec(module_spec)

module_spec.loader.exec_module(module)returnmoduleif __name__ == '__main__':

module_spec= check_module('fake_module')

module_spec= check_module('collections')ifmodule_spec:

module=import_module_from_spec(module_spec)print(dir(module))

从源文件中导入

importlib.util工具还有一个功能,可以在仅仅知道模块名字和路径的情况下通过该工具导入,如下:

importimportlib.utildefimport_source(module_name):

module_file_path= module_name.__file__module_name= module_name.__name__module_spec=importlib.util.spec_from_file_location(module_name, module_file_path)

module=importlib.util.module_from_spec(module_spec)

module_spec.loader.exec_module(module)print(dir(module))

msg= 'The {module_name} module has the following methods: {methods}'

print(msg.format(module_name=module_name, methods=dir(module)))if __name__ == '__main__':importos

import_source(os)

import_from_github_com

有一个优雅的模块import_from_github_com可以从github中寻找并加载模块,该模块使用了PEP 302中提供的import hook来实现功能。该模块并没有使用importlib模块,而是使用pip安装模块,如果pip没有安装则使用Python的import()函数实际导入新的安装模块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
importlib_metadata 是一个Python的标准库,它可以被用来获取、处理和操作Python软件包的元数据信息。当我们在开发Python程序时,经常会用到导入其他第三方库,而 importlib_metadata 可以帮助我们轻松地获取这些库的元数据信息,比如版本号、作者、依赖关系等等。 在使用 importlib_metadata 时,我们可以通过一些简单的命令来获取这些元数据信息。比如,我们可以使用 importlib_metadata.metadata('packagename') 来获取指定包的元数据信息,使用 importlib_metadata.version('packagename') 来获取指定包的版本号,使用 importlib_metadata.requires('packagename') 来获取指定包的依赖关系等等。这些命令让我们在需要时可以轻松地获取到其他包的相关信息,帮助我们更好地了解和使用这些包。 除了获取元数据信息,importlib_metadata 还可以被用来处理和操作元数据信息。我们可以通过一些命令来改变和更新指定包的元数据信息,比如修改包的版本号、添加或删除依赖关系等等。这些功能给了我们更多的灵活性和控制权,让我们可以更好地管理和维护我们的Python程序。 总之,importlib_metadata 是一个非常方便实用的工具,它可以帮助我们更轻松地获取、处理和操作Python软件包的元数据信息,让我们的开发工作变得更加简单和高效。因此,如果你在开发Python程序时需要获取其他包的元数据信息,不妨试试 importlib_metadata 吧!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值