python的查找器
一、元路径查找器(metapathfinder)
元路径查找器的工作就是看是否能找到模块。这些查找器存放在sys.meta_path中以供Python遍历(当然它们也可以通过import勾子返回,参见上面的例子)。每个查找器必须实现find_spec方法。如果一个查找器知道怎么处理将引入的模块,find_spec将返回一个ModuleSpec对象(参见下节)否则返回None。
和之前提到的一样sys.meta_path包含三种查找器:
内置模块查找器
冻结模块查找器
基于路径的查找器
这里我们想重点聊一聊基于路径的查找器(pathbasedfinder)。它用于搜索一系列import路径,每个路径都用来查找是否有对应的模块可以加载。默认的路径查找器实现了所有在文件系统的特殊文件中查找模块的功能,这些特殊文件包括Python源文件(.py文件),Python编译后代码文件(.pyc文件),共享库文件(.so文件)。如果Python标准库中包含zipimport,那么相关的文件也可用来查找可引入的模块。
路径查找器不仅限于文件系统中的文件,它还可以上URL数据库的查询,或者其他任何可以用字符串表示的地址。
你可以用上节提供的勾子来实现对同类型地址的模块查找。例如,如果你想通过URL来import模块,那么你可以写一个import勾子来解析这个URL并且返回一个路径查找器。
注意,路径查找器不同于元路径查找器。后者在sys.meta_path中用于被Python遍历,而前者特指基于路径的查找器。
二、ModuleSpec对象
每个元路径查找器必须实现find_spec方法,如果该查找器知道如果处理要引入的模块,那么这个方法将返回一个ModuleSpec对象。这个对象有两个属性值得一提,一个是模块的名字,而另一个则是查找器。如果一个ModuleSpec对象的查找器是None,那么类似ImportError:missingloader的异常将会被抛出。查找器将用来创建和执行一个模块(见下节)。
你可以通过.__spec__来查找模块的ModuleSpec对象:
In[1]:importsys
In[2]:sys.__spec__
Out[2]:ModuleSpec(name='sys',loader=)
三、加载器(loader)
加载器通过create_module来创建模块以及exec_module来执行模块。通常如果一个模块是一个Python模块(非内置模块或者动态扩展),那么该模块的代码需要在模块的__dict__空间上执行。如果模块的代码无法执行,那么就会抛出ImportError异常,或者其他在执行过程中的异常也会被抛出。
绝大多数情况下,查找器和加载器是同一个东西。这种情况下,查找器的find_spec方法返回的ModuleSpec对象的loader属性将指向它自己。
我们可以用create_module来动态创建一个模块,如果它返回NonePython会自动创建一个模块。
以上内容为大家介绍了python的查找器,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。
猜你喜欢LIKE
相关推荐HOT
更多>>python中的filter函数功能是什么?
python中的filter函数功能是什么?在python中,面对众多的数据,我们要过滤筛选出我们需要的数据。python中的filter函数就是起到了过滤筛选的作...详情>>
2023-11-10 20:37:27pythontime模块是什么
pythontime模块是什么在python中使用时间,就免不了和time模块打交道,另外两个模块这个暂时先不做介绍。做time模块的使用上,我们可以用它来对...详情>>
2023-11-10 15:53:16python是什么编程语言
python是什么编程语言1、说明是一种面向对象、解释型计算机程序设计语言,由GuidovanRossum于1989年底发明,第一个公开发行版发行于1991年。Pyt...详情>>
2023-11-10 15:21:05python异常处理的两种技巧
python异常处理的两种技巧1、传递异常有时我们会在捕捉到一个异常后重新引发它(传递异常),实现起来很简单,使用不带参数的raise语句即可。deff...详情>>
2023-11-10 14:49:39热门推荐
python中的filter函数功能是什么?
沸python delattr函数如何使用?
热python中pdb模块怎么用?
热Python如何截图保存?
新python中缺少module怎么办?
python strftime和strptime的不同分析
python time.strptime的格式化
python中@contextmanager是什么?
python对象的三要素是什么
pythonGIL在Python多线程的应用
python如何对多个CSV文件进行读取
pythonif嵌套命令如何理解?
python对列表进行永久性或临时排序的方法
python生成器调用方法引发异常